1、二级 C+笔试-394 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.程序流程图中带有箭头的线段表示的是( )。A) 图元关系 B) 数据流 C) 控制流 D) 调用关系(分数:1.00)A.B.C.D.2.结构化程序设计的基本原则不包括( )。A) 多态性 B) 自顶向下 C) 模块化 D) 逐步求精(分数:1.00)A.B.C.D.3.软件设计中模块划分应遵循的准则是( )。A) 低内聚低耦合 B) 高内聚低耦合 C) 低内聚高耦合 D) 高内聚高耦合(分数:1.00)A.B.C.D.4.在软件开发中,需求分析阶段产生的主要文档是(
2、)。A) 可行性分析报告 B) 软件需求规格说明书C) 概要设计说明书 D) 集成测试计划(分数:1.00)A.B.C.D.5.算法的有穷性是指( )。A) 算法程序的运行时间是有限的 B) 算法程序所处理的数据量是有限的C) 算法程序的长度是有限的 D) 算法只能被有限的用户使用(分数:1.00)A.B.C.D.6.对长度为 n 的线性表排序,在最坏情况下,比较次数不是 n(n-1)/2 的排序方法是( )。A) 快速排序 B) 冒泡排序 C) 直接插入排序 D) 堆排序(分数:1.00)A.B.C.D.7.下列关于栈的叙述正确的是( )。A) 栈按“先进先出”组织数据 B) 栈按“先进后出
3、”组织数据C) 只能在栈底插人数据 D) 不能删除数据(分数:1.00)A.B.C.D.8.在数据库设计中,将 E-R 图转换成关系数据模型的过程属于( )。A) 需求分析阶段 B) 概念设计阶段 C) 逻辑设计阶段 D) 物理设计阶段(分数:1.00)A.B.C.D.9.有三个关系 R、S 和 T 如下:(分数:1.00)A.B.C.D.10.设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号),课程 C(课号,课名),选课 SC(学号,课号,成绩),则表 SC 的关键字(键或码)为( )。A) 课号,成绩 B) 学号,成绩 C) 学号,课号 D) 学号,姓名,成绩(分数:
4、1.00)A.B.C.D.11.下列语句中,错误的是( )。A) const int buffer =256; B) const int temp;C) const double * point; D) const double * rt = new double(5.5) ;(分数:1.00)A.B.C.D.12.有如下程序:int x =3;do x- =2;cout x;while(! (-x);执行这个程序的输出结果是( )。A) 1 B) 30 C) 1-2 D) 死循环(分数:1.00)A.B.C.D.13.犹如下程序#include iostream using namespac
5、e std;int main()int * p ;*p=9;cout “Thevalueatp:“ *p;return 0 ;编译运行程序将出现的情况是( )。A) 编译时出现语法错误,不能生成可执行文件B) 运行时一定输出:The value at p:9C) 运行时一定输出:The value at p: *9D) 运行时有可能出错(分数:1.00)A.B.C.D.14.if 语句的语法格式可描述为:格式 1:if(条件)语句或格式 2:if(条件)语句 1else语句 2关于上面的语法格式,下列表述中错误的是( )。A) 条件部分可以是一个 if 语句,例如 if(if(a= =0)B)
6、 语句部分可以是一个 if 语句,例如 if()if()C) 如果在条件前加上逻辑非运算符! 并交换语句 1和语句 2的位置,语句功能不变D) 语句部分可以是一个循环语句,例如 if()while()(分数:1.00)A.B.C.D.15.下列符号中,正确的 C+标识符是( )。A) enum B) 2b C) foo-9 D) 32(分数:1.00)A.B.C.D.16.下列关于 C+函数的说明中,正确的是( )。A) 内联函数就是定义在另一个函数体内部的函数B) 函数体的最后一条语句必须是 return 语句C) 标准 C+要求在调用一个函数之前,必须先声明其原型D) 编译器会根据函数的返
7、回值类型和参数表来区分函数的不同重载形式(分数:1.00)A.B.C.D.17.运算符重载是对已有的运算符赋予多重含义,因此( )。A) 可以对基本类型(如 int 类型)的数据,重新定义“+”运算符的含义B) 可以改变一个已有运算符的优先级和操作数个数C) 只能重载 C+中已经有的运算符,不能定义新运算符D) C+中已经有的所有运算符都可以重载(分数:1.00)A.B.C.D.18.下列有关内联函数的叙述中,正确的是( )。A) 内联函数在调用时发生控制转移B) 内联函数必须通过关键字 inline 来定义C) 内联函数是通过编译器来实现的D) 内联函数函数体的最后一条语句必须是 retur
8、n 语句(分数:1.00)A.B.C.D.19.下列预算符不能重载为友元函数的( )。A) = () ( ) - B) + - + - C) = = D) += -= *= /=(分数:1.00)A.B.C.D.20.有如下程序:#include iostream using namespaee std;int main()void function( double val) ;double val;function(val) ;cout val ;return 0 ;void function( double val)val =3;编译运行这个程序将出现的情况是( )。A) 编译出错,无法运
9、行 B) 输出:3C) 输出:3.0 D) 输出一个不确定的数(分数:1.00)A.B.C.D.21.下面是重载为非成员函数的运算符原型,其中错误的是( )。A) Fraction operator + (Fraction, Fraction) ;B) Fraetion operator- (Fraction) ;C) FractionD) Fraction(分数:1.00)A.B.C.D.22.有如下类定义:class MyClasspublic :_private :int data;若要为 MyClass 类重载流输入运算符“”,使得程序中可以“cinobj;”的形式改变 MyClass
10、 类的对象 obj 中数据成员 data 的值,则横线处的声明语句应为( )。A) friend istreamB) friend istreamC) istreamD) istream(分数:1.00)A.B.C.D.23.由于常对象不能被更新,因此( )。A) 通过常对象只能调用它的常成员函数B) 通过常对象只能调用静态成员函数C) 常对象的成员都是常成员D) 通过常对象可以调用任何不改变对象值的成员函数(分数:1.00)A.B.C.D.24.有如下类定义:class AAint a;public :int getRef()const t return /int getValue()con
11、st return a; /void set(int n)const a=n; /friend void show(AA aa)const cout a; /;其中四个函数的定义中正确的是( )。A) B) C) D) (分数:1.00)A.B.C.D.25.下列关于 this 指针的描述中,正确的是( )。A) 类的成员函数都有 this 指针 B) 类的友元函数都有 this 指针C) 任何与类相关的函数都有 this 指针 D) 类的非静态成员函数都有 this 指针(分数:1.00)A.B.C.D.26.下列关于虚函数的说明中,正确的是( )。A) 从虚基类继承的函数都是虚函数 B)
12、虚函数不得是静态成员函数C) 只能通过指针或引用调用虚函数 D) 抽象类中的成员函数都是虚函数(分数:1.00)A.B.C.D.27.下列关于基类和派生类关系的叙述中,正确的是( )。A) 每个类最多只能有一个直接基类B) 派生类中的成员可以访问基类中的任何成员C) 基类的构造函数必须在派生类的构造函数体中调用D) 派生类除了继承基类的成员,还可以定义新的成员(分数:1.00)A.B.C.D.28.有如下类定义:class Bpublic: void funl() private, void fun2() protected : void fun3 () ;class D: public Bp
13、rotected: void fun4 () ;若 obj 是类 D 的对象,则下列语句中不违反访问控制权限的是( )。A) obj. funl(); B) obj. fun2() ; C) obj. fun3() ; D) obj. fun4() ;(分数:1.00)A.B.C.D.29.有如下类定义:class Foopublic :Foo(int v) : value(v) /Foo() /private :Foo() /int value = 0; /;其中存在语法错误的行是( )。A) B) C) D) (分数:1.00)A.B.C.D.30.有如下类定义:class Pointin
14、t xx, yy;public :Point() : xx(0), yy(0) Point( int x, int y =0) : xx(x), yy(y) ;Point a(2), b3, *c4;则 Point 类的构造函数呗调用的次数是( )。A) 2 次 B) 3 次 C) 4 次 D) 5 次(分数:1.00)A.B.C.D.31.有如下类定义:class Testpublic :Test() a = 0; c = 0; /int f(int a) const this-a = a; /static int g() return a; /void h(int b) Test:b =
15、b; ;/private :int a ;static int b;const int c;int Test:b = 0;在标注号码的行中,能被正确编译的是( )。A) B) C) D) (分数:1.00)A.B.C.D.32.有如下类声明:class SAMPLEint n;public :SAMPLE( int i = 0): n (i) void setValue( int n0) ;下列关于 getValue 成员函数的定义中,正确的是( )。A) SAMPLE: :setValue(int n0) n =n0; B) void SAMPLE: :setValue(int n0) n
16、=n0; C) void setValue(int n0) n=n0; D) setValue(int n0) n=n0;(分数:1.00)A.B.C.D.33.有如下程序:#include iostream using namespace std;class Apublic :A() cout“A“; A() t cout“ A“; ;class B : public AA* p;public :B() cout“B“; p = new A();B() cout“ B“; deletep; ;int main()B obj;return 0 ;执行这个程序的输出结果是( )。A) BAAAB
17、A B) ABABAAC) BAABAA D) ABAABA(分数:1.00)A.B.C.D.34.有如下程序:#include iostream using namespaee std;class Baseprivate :void fun1() const cout “fun1“ ;protected :void fun2 () const cout “fun2“ ;publie:void fun3 () const cout “fun3“ ;class Derived : protected Basepublic :void fun4 () const cout “fun4“ ;int
18、main()Derived obj ;obj. fun1() ;/obj. fun2() ;/obj. fun3() ; /obj. fun4() ; /return 0 ;其中的语法错误的语句是( )。A) B) C) D) (分数:1.00)A.B.C.D.35.有如下程序:#include iostream using namespaee std;class Baselpublic :Basel(int d) cout d; Basel () ;class Base2public :Base2 ( int d) cout d ; Base2() ;class Derived : publ
19、ic Base1 ,Base2public :Derived(int a, int b, int c, int d) :Base1(b), Base2(a), b1(d), b2(e) private :int b1 ;int b2 ;int main()Derived d(1,2,3,4) ;return 0 ;执行这个程序的输出记过是( )。A) 1234 B) 2134 C) 12 D) 21(分数:1.00)A.B.C.D.36.有如下程序:#include iostream using namespace std;class Basepublic :void fun1 () cout
20、 “ Base/n“ ; virtual void fun2() I cout “Basekn“ ; ;class Derived : public Base public :void fun1() cout “ Derived/n“ ; void fun2() cout “ Derived/n“ ; ;void f(Base b. fun2() ; int main()Derived obj ;f(obj) ;return 0 ;执行这个程序的输出结果是( )。A) BaseBaseB) BaseDerivedC) DerivedBaseD) DerivedDerived(分数:1.00)A
21、.B.C.D.37.模板对类型的参数化提供了很好的支持,因此( )。A) 类模板的主要作用是生成抽象类B) 类模板实例化时,编译器将根据给出的模板实参生成一个类C) 在类模板中的数据成员都具有同样类型D) 类模板中的成员函数都没有返回值(分数:1.00)A.B.C.D.38.有如下函数模板:template typename T, typename U Tcast(U u) returnu; 其功能是将 U 类型数据转换为 T 类型数据。已知 i 为 int 型变量,下列对模板函数 cast 的调用中正确的是( )。A) cast(i) ; B) cast (i);C) cast char *
22、 , int (i) ; D) cast double, int (i) ;(分数:1.00)A.B.C.D.39.要建立文件流并打开当前目录下的文件 file. dat 用于输入,下列语句中错误的是( )。A) ifstream fin = ifstream, open( “file. dat“ ) ;B) ifstream * fin = new ifstream( “file. dat“ ) ;C) ifstream fin; fin. open ( “file. dat“ ) ;D) ifstream * fin = new ifstream() ; fin - open( “file
23、. dat“ ) ;(分数:1.00)A.B.C.D.40.当使用 ifstream 流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为( )。A) ios_base: :in B) ios_base: :in | ios_base: :outC) los_base: :out D) ios_base: :in class MyClass int value ;public :/ ERROR * found *void MyClass(int val) : value(val) int GetValue() const return value; void SetValue(int
24、val) ;/ERROR * found *inline void SetValue(int val) value = val; int main()MyClass obj (0) ;obj. SetValne(10) ;/ERROR * found * 下列语句功能是输出 obj 的成员 value 的值cout “The value is “ obj. value endl;return 0 ;(分数:20.00)_三、简单应用题(总题数:1,分数:20.00)42.请使用 VC6 或使用答题菜单打开考生文件夹 proj2 下的工程 proj2,此工程包含有一个源程序文件proj2. cp
25、p,其中定义了 Stack 类和 ArrayStack 类。Stack 是一个用于表示数据结构“栈”的类,栈中的元素是字符型数据。Stack 为抽象类,它只定义了栈的用户接口,如下所示:公有成员函数 功能push 入栈:在栈顶位置添加一个元素pop 退栈:取出并返回栈顶元素ArrayStack 是 Stack 的派生类,它实现了 Stack 定义的接口。ArrayStack 内部使用动态分配的字符数组作为栈元素的存储空间。数据成员 maxSize 表示的是栈的最大容量,top 用于记录栈顶的位置。成员函数push 和 pop 分别实现具体的入栈和退栈操作。请在程序中的横线处填写适当的代码,然后
26、删除横线,以实现上述功能。此程序的正确输出结果应为:a, b, cc, b, a注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“/* found *”。/ proj2, cpp#include iostream using namespace std;class Stack public :virtual void push(char c) = 0;virtual char pop() = 0;class ArrayStack : public Stack char * p;int maxSize ;int top ;public :ArrayStack( int
27、s)top = 0;maxSize = s;/* found *p =_; ArrayStack ()/* found *_;void push(char c)if (top = maxSize) cerr “Overflow! /n“;return ;/* found *_;top + ;char pop ()if(top = 0) cerr “Underflow! /n“;return /0 ;top- ;/* found *_;void f(Stackcout ch0 “,“ chi1 “,“ ch2 endl;sRef. push ( ch 0 ) ; sRef. push ( ch
28、1 ) ; sRef. push ( ch 2 ) ;cout sRef. pop() “, “;cout sRef. pop() “, “;cout sRef. pop() endl;int main ()ArrayStack as(10) ;f(as) ;return 0 ;(分数:20.00)_四、综合应用题(总题数:1,分数:20.00)43.请使用 VC6 或使用答题菜单打开考生目录 proj3 下的工程文件 proj3,此工程中包含一个源程序文件 proj3. cpp,补充编制 C+程序 proj3. cpp,其功能是读取文本文件 in. dat 中的全部内容,将文本存放到 doc
29、 类的对象 myDoc 中。然后将 myDoc 中的字符序列反转,并输出到文件 out. dat 中。文件 in. dat 的长度不大于 1000 字节。要求:补充编制的内容写在“/*333*”与“/*66666*”两行之间。实现将 myDoc 中的字符序列反转,并将反转后的序列在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件 out. dat 中,输出函数 writeToFile 已经给出并且调用。/proj3. cpp#include iostream #include fstream #include estring using namespace std;clas
30、s docprivate:char * str;/文本字符串首地址int length; /文本字符个数public :/构造函数,读取文件内容,用于初始化新对象,filwename 是文件名字符串首地址doe(char * filename) ;void reverse() ;/将字符序列反转 doc () ;void writeToFile ( char * filename) ;doc : : doc ( char * filename)ifstream myFile(filename) ;int len = 1001 ,trap;str = new char len ;length =
31、 0 ;while( ( tmp = myFile, get() ) != EOF)str length + = trap ;str length = /0 ;myFile, close () ;void doc : : reverse () /将数组 str 中的 length 个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个/字符交换/* 333 */* 666 *doe : : doc ()delete str;void doe : :writeToFile( char * filename)ofstream outFile(filename) ;outFile str;o
32、utFile, close () ;void main()doe myDoc( “in. dat“ ) ;myDoe, reverse () ;myDoc, writeToFile( “out. dat“ ) ;(分数:20.00)_二级 C+笔试-394 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.程序流程图中带有箭头的线段表示的是( )。A) 图元关系 B) 数据流 C) 控制流 D) 调用关系(分数:1.00)A.B.C. D.解析:解析 在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择
33、 C。2.结构化程序设计的基本原则不包括( )。A) 多态性 B) 自顶向下 C) 模块化 D) 逐步求精(分数:1.00)A. B.C.D.解析:解析 结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用 goto 语句,所以选择 A。3.软件设计中模块划分应遵循的准则是( )。A) 低内聚低耦合 B) 高内聚低耦合 C) 低内聚高耦合 D) 高内聚高耦合(分数:1.00)A.B. C.D.解析:解析 软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,
34、易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。4.在软件开发中,需求分析阶段产生的主要文档是( )。A) 可行性分析报告 B) 软件需求规格说明书C) 概要设计说明书 D) 集成测试计划(分数:1.00)A.B. C.D.解析:解析 A 错误,可行性分析阶段产生可行性分析报告。C 错误,概要设计说明书是总体设计阶段产生的文档。D 错误,集成测试计划是在概要设计阶段编写的文档。B 正确,软件需求规格说明书是后续工作如设计、编码等需要的重要参考文档。5.算法的有穷性是指( )。A) 算法程序的运行时间是有限的 B) 算法程序所处理的数据量是有限的C) 算法程序的长度是有限的
35、 D) 算法只能被有限的用户使用(分数:1.00)A. B.C.D.解析:解析 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。6.对长度为 n 的线性表排序,在最坏情况下,比较次数不是 n(n-1)/2 的排序方法是( )。A) 快速排序 B) 冒泡排序 C) 直接插入排序 D) 堆排序(分数:1.00)A.B.C.D. 解析:解析 除了堆排序算法的比较次数是 O(nlog2n),其他的都是 n(n-1)/2。7.下列关于栈的叙述正确的是( )。A) 栈按“先进先出”组织数据 B) 栈按“先进后出”组织数据C) 只能在栈底插人数据 D)
36、 不能删除数据(分数:1.00)A.B. C.D.解析:解析 栈是按“先进后出”的原则组织数据的,数据的插入和删除都在栈顶进行操作。8.在数据库设计中,将 E-R 图转换成关系数据模型的过程属于( )。A) 需求分析阶段 B) 概念设计阶段 C) 逻辑设计阶段 D) 物理设计阶段(分数:1.00)A.B.C. D.解析:解析 E-R 图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。9.有三个关系 R、S 和 T 如下:(分数:1.00)A.B.C.D. 解析:解析 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且
37、在结果中把重复的属性列去掉,所以 B 错误。笛卡尔积是用 R 集合中元素为第一元素,S 集合中元素为第二元素构成的有序对,所以 C 错误。根据关系 T 可以很明显地看出是从关系 R 与关系 s 中取得相同的关系组所以取得是交运算,选择 D。10.设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号),课程 C(课号,课名),选课 SC(学号,课号,成绩),则表 SC 的关键字(键或码)为( )。A) 课号,成绩 B) 学号,成绩 C) 学号,课号 D) 学号,姓名,成绩(分数:1.00)A.B.C. D.解析:解析 学号是学生表 s 的主键,课号是课程表 C 的主键,所以选课表
38、 SC 的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择 C。11.下列语句中,错误的是( )。A) const int buffer =256; B) const int temp;C) const double * point; D) const double * rt = new double(5.5) ;(分数:1.00)A.B. C.D.解析:解析 const 是一个 C+语言的关键字,它限定一个变量不允许被改变。使用 const 在一定程度上可以提高程序的安全性和可靠性。限定符声明变量只能被读,必须初始化。B 选项中没有初始化,C 选项为指向常量的指针,定义
39、时初始化与否均可,如果是 const * double point 形式,则为常指针,必须在定义时进行初始化,A、C、D 都正确。12.有如下程序:int x =3;do x- =2;cout x;while(! (-x);执行这个程序的输出结果是( )。A) 1 B) 30 C) 1-2 D) 死循环(分数:1.00)A.B.C. D.解析:解析 本题考查 do. while 语句,执行 do. while 语句时,先执行循环体内的语句,然后判断 while 中表达式的值,表达式为非零时,返回重新执行循环体语句。在本题中,先执行循环体内的语句,输出 2,然后判断表达式,为非零,且此时 x 为
40、 0;再次执行循环体时,输出-2,然后判断表达式为 0,不执行,退出,所以答案为 C。13.犹如下程序#include iostream using namespace std;int main()int * p ;*p=9;cout “Thevalueatp:“ *p;return 0 ;编译运行程序将出现的情况是( )。A) 编译时出现语法错误,不能生成可执行文件B) 运行时一定输出:The value at p:9C) 运行时一定输出:The value at p: *9D) 运行时有可能出错(分数:1.00)A.B.C.D. 解析:解析 先定义指针变量,然后给指针变量赋初值有三种情况:
41、用取地址运算符“”将变量地址赋给指针变量,如 p=a;将一个指针变量中的地址赋给另一个指针变量,如 p=p1;给指针变量赋空值 0,如 q=0,表示该指针变世不指向任何变量。而不能用一个常量给指针变量赋初值,所以本题选D。14.if 语句的语法格式可描述为:格式 1:if(条件)语句或格式 2:if(条件)语句 1else语句 2关于上面的语法格式,下列表述中错误的是( )。A) 条件部分可以是一个 if 语句,例如 if(if(a= =0)B) 语句部分可以是一个 if 语句,例如 if()if()C) 如果在条件前加上逻辑非运算符! 并交换语句 1和语句 2的位置,语句功能不变D) 语句部
42、分可以是一个循环语句,例如 if()while()(分数:1.00)A. B.C.D.解析:解析 本题考查 if 语句,if 语句的条件部分不能嵌套 if 语句,所以 A 选项错误;B 选项就是 if语句嵌套;C 选项其实就是将判断条件颠倒,然后执行语句也颠倒,所以效果一样;D 选项也正确。15.下列符号中,正确的 C+标识符是( )。A) enum B) 2b C) foo-9 D) 32(分数:1.00)A.B.C.D. 解析:解析 本题考查 C+标识符的命名规则,规定如下:所有标识符可以由字母、数字和下画线组成,且必须以字母或下画线开头;C+的关键字不能作为标识符;大、小写字母表示不同意
43、义,即代表不同的标识符,如 mun 和 Mun。A 选项是 C+的关键字,B 选项不能以数字开头,C 选项“-”不能用于组成标识符。16.下列关于 C+函数的说明中,正确的是( )。A) 内联函数就是定义在另一个函数体内部的函数B) 函数体的最后一条语句必须是 return 语句C) 标准 C+要求在调用一个函数之前,必须先声明其原型D) 编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式(分数:1.00)A.B.C. D.解析:解析 一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,而不是在定义在另
44、一个函数体内,所以 A 选项错误。函数可以没有返回值,所以就不需要 return 了,如果被调函数在调用函数之前已经定义,那么就不需要声明,所以 C 选项错误,正确选项为 D。17.运算符重载是对已有的运算符赋予多重含义,因此( )。A) 可以对基本类型(如 int 类型)的数据,重新定义“+”运算符的含义B) 可以改变一个已有运算符的优先级和操作数个数C) 只能重载 C+中已经有的运算符,不能定义新运算符D) C+中已经有的所有运算符都可以重载(分数:1.00)A.B.C. D.解析:解析 重载运算符的规则如下:C+不允许用户自己定义新的运算符,只能对已有的 C+运算符进行重载;C+不能重载
45、的运算符只有 5 个;重载不能改变运算符运算对象的个数;重载不能改变运算符的优先级和结合性;重载运算符的函数不能有默认的参数;重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是 C+的标准类型。故本题答案为C。18.下列有关内联函数的叙述中,正确的是( )。A) 内联函数在调用时发生控制转移B) 内联函数必须通过关键字 inline 来定义C) 内联函数是通过编译器来实现的D) 内联函数函数体的最后一条语句必须是 return 语句(分数:1.00)A.B.C. D.解析:解析 一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的
46、函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,所以在调用时不发生控制转移。在类内部实现的函数都是内联函数,可以不用 inline 定义;只有函数外部定义的内联函数才必须加关键字 inline。编译系统并非对内联函数必须使用内联,而且根据具体情况决定。内联函数不是必须要有返回值的。19.下列预算符不能重载为友元函数的( )。A) = () ( ) - B) + - + - C) = = D) += -= *= /=(分数:1.00)A. B.C.D.解析:解析 关于运算符重载为友元函数有如下规定:一般情况下,单目运算符最好重载为类的成员函数,双目运算符则最好重载为类的友元函数;双目运算符“=、()、-”不能重载为类的友元函数。所以本题答案为 A。20.有如下程序:#include iostream using namespaee std;int main()void function( double val) ;double val;function(val) ;cout val ;return 0 ;void function( double val)val =3;编译运行这个程序