1、二级 C+-19-1 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列数据结构中,属于非线性结构的是_。(分数:1.00)A.循环队列B.带链队列C.二叉树D.带链栈2.下列数据结构中,能够按照“先进后出”原则存取数据的是_。(分数:1.00)A.循环队列B栈C.队列D.二叉树3.对于循环队列,下列叙述中正确的是_。(分数:1.00)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队尾指针4.算法的空间复杂度是指_。(分数:1.00)A.算法在执行过程中所需要的计算
2、机存储空间B.算法所处理的数据量C.算法程序中的语句或指令条数D.算法在执行过程中所需要的临时工作单元数5.软件设计中划分模块的一个准则是_。(分数:1.00)A.低内聚低耦合B.高内聚低耦合C.低内聚高耦合D.高内聚高耦合6.下列选项中不属于结构化程序设计原则的是_。(分数:1.00)A.可封装B.自顶向下C.模块化D.逐步求精7.软件详细设计产生的图如下: (分数:1.00)A.N-S 图B.PAD 图C.程序流程图D.E-R 图8.数据库管理系统是_。(分数:1.00)A.操作系统的一部分B.在操作系统支持下的系统软件C.一种编译系统D.一种操作系统9.在 E-R 图中,用来表示实体联系
3、的图形是_。(分数:1.00)A.椭圆形B.矩形C.菱形D.三角形10.有三个关系 R,S 和 T 如下: R A B C a 1 2 b 2 1 c 3 1 S A B C d 3 2 T A B C a 1 2 b 2 1 C 3 1 d 3 2 其中关系 T 由关系 R 和 S 通过某种操作得到,该操作为_。(分数:1.00)A.选择B.投影C交D并11.下列符号中可以用做 C+标识符的是_。(分数:1.00)A._radiusB.foobarC.elseD.3room12.下列各组类型声明符中,含义相同的一组是_。(分数:1.00)A.unsigned long int 和 longB
4、.signed short int 和 shortC.unsigned short 和 shortD.short int 和 int13.必须用一对大括号括起来的程序段是_。(分数:1.00)A.switch 语句中的 case 标号语句B.if 语句的分支C.循环语句的循环体D.函数的函数体14.语句 int *p=定义了指针 p,与这个语句等效的语句序列是_。(分数:1.00)A.int *p; p=B.int *p; p=k;C.int *p; *p=D.int*p; *p=k;15.执行下列语句段后,输出字符“*”的个数是_。 for(int i=50; i1; i-=2)cout“*
5、“;(分数:1.00)A.24B.25C.26D.5016.下列关于运算符重载的叙述中,错误的是_。(分数:1.00)A.有的运算符可以作为非成员函数重载B.所有的运算符都可以通过重载而被赋予新的含义C.不得为重载的运算符函数的参数设置默认值D.有的运算符只能作为成员函数重载17.对 C+编译器区分重载函数无任何意义的信息是_。(分数:1.00)A.参数类型B.参数个数C.返回值类型D.常成员函数关键字 const18.运算符重载时不需要保持的性质是_。(分数:1.00)A.操作数个数B.操作数类型C.优先级D.结合性19.下列关于函数的描述中,错误的是_。(分数:1.00)A.函数可以没有返
6、回值B.函数可以没有参数C.函数可以是一个类的成员D.函数不能被定义为模板20.关于函数重载,下列叙述中错误的是_。(分数:1.00)A.重载函数的函数名必须相同B.重载函数必须在参数个数或类型上有所不同C.重载函数的返回值类型必须相同D.重载函数的函数体可以有所不同21.下列关于运算符重载的描述中,正确的是_。(分数:1.00)A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B.一元运算符只能作为成员函数重载C.二元运算符重载为非成员函数时,参数表中有一个参数D.C+中可以重载所有的运算符22.有如下函数定义: void func(int a, int b+; 若执行代码段:
7、 int x=0, y=1; func(x, y); 则变量 x 和 y 的值分别是_。(分数:1.00)A.0 和 1B.1 和 1C.0 和 2D.1 和 223.对于一个类定义,下列叙述中错误的是_。(分数:1.00)A.如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数B.如果没有定义缺省的构造函数,编译器一定将生成一个缺省的构造函数C.如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数D.如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数24.有如下头文件: int f1(); static int f2(); class MA public:
8、int f3(); static int f4(); ; 在所描述的函数中,具有隐含的 this 指针的是_。(分数:1.00)Af1Bf2Cf3Df425.下列关于类定义的说法中,正确的是_。(分数:1.00)A.类定义中包括数据成员和函数成员的声明B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义26.如果派生类以 protected 方式继承基类,则原基类的 protected 成员和 public 成员在派生类中的访问属性分别是_。(分数:1.00)A.public 和 publicB.public 和 protectedC.protecte
9、d 和 publicD.protected 和 protected27.下列有关继承和派生的叙述中,正确的是_。(分数:1.00)A.派生类不能访问基类的保护成员B.作为虚基类的类不能被实例化C.派生类应当向基类的构造函数传递参数D.虚函数必须在派生类中重新实现28.有如下类定义: class AA int a; public: AA(int n=0): a(n) ; class BB: public AA public: BB(int n)_ ; 其中横线处缺失的部分是_。(分数:1.00)A.:a(n) B.:AA(n) C.a(n);D.a=n;29.有如下程序: #includeios
10、tream using namespace std; class CD public: CD() cout“C“; private: char name80; ; int main() CD a, *b, d2; return 0; 执行这个程序的输出结果是_。(分数:1.00)A.CCCCB.CCCC.CCDC30.有如下程序: #includeiostream using namespace std; class MyClass public: MyClass() +count; MyClass() -count; static int getCount() return count; p
11、rivate: static int count; ; int MyClass:count=0; int main() MyClass obj; coutobj. getCount(); MyClass*ptr=new MyClass; coutMyClass:getCount(); delete ptr; coutMyClass:getCount(); return 0; 执行这个程序的输出结果是_。(分数:1.00)A.121B.232C.221D.12231.有如下程序: #includeiostream using namespace std; class MyClass public
12、: MyClass(int x): val(x) void Print()const cout“const: val=“val“/t“; void Print() cout“val=“val“/t“; private: int val; ; int main() const MyClass obj1(10); MyClass obj2(20); obj1. Print(); obj2. Print(); return 0; 执行这个程序的输出结果是_。(分数:1.00)A.val=10 const: val=20B.const: val=10 const: val=20C.const: val
13、=10 val=20D.val=10 val=2032.有如下程序: #includeiostream using namespace std; class Part public: Part(int x=0): val(x) coutval; Part() coutval; private: int val; ; class Whole public: whole(int x, int y, int z=0): p2(x), p1(y), val(z) coutVal; Whole() coutval; private: Part p1, p2; int val; ; int main()
14、Whole obj(1, 2, 3); return 0; 执行这个程序的输出结果是_。(分数:1.00)A.123321B.213312C.213D.12312333.有如下程序: #includeiostream using namespace std; class Base public: Base(int x=0) coutx; ; class Derived: public Base public: Derived(int x=0) coutx; private: Base val; ; int main() Derived d(1); return 0; 执行这个程序的输出结果是_
15、。(分数:1.00)A.0B.1C.01D.00134.下列代码段中声明了 3 个类: class Person ; class Student: public Person ; class Undergraduate: Student ; 下列关于这些类之间关系的描述中,错误的是_。(分数:1.00)A.类 Person 是类 Undergraduate 的基类B.类 undergraduate 从类 Student 公有继承C.类 Student 是类 Person 的派生类D.类 Undergraduate 是类 Person 的派生类35.有如下程序: #includeiostream
16、 using namespace std; class Base public: void output() cout1; virtual void Print() cout“B“; ; class Derived: public Base public: void output() cout2; void Print() cout“D“; ; int main() Base *ptr=new Derived; ptr-output(); ptr-Print(); delete ptr; return 0; 执行这个程序的输出结果是_。(分数:1.00)A.1BB.1DC.2BD.2D36.有
17、如下程序: #includeiostream using namespace std; class B public: virtual void show() cout“B“; ; class D: public B public: void show() cout“D“; ; void fun1(B *ptr) ptr-show(); void fun2(B void fun3(B b) b. show(); int main() B b, *P=new D; D d; fun1(P); fun2(b); fun3(d); delete P; return 0; 执行这个程序的输出结果是_。
18、(分数:1.00)A.BBBB.BBDC.DBBD.DBD37.C+中的模板包括_。(分数:1.00)A.对象模板和函数模板B.对象模板和类模板C.函数模板和类模板D.变量模板和对象模板38.下列关于类模板的模板参数的叙述中,错误的是_。(分数:1.00)A.模板参数可以作为数据成员的类型B.模板参数可以作为成员函数的返回类型C.模板参数可以作为成员函数的参数类型D.模板参数不能作为成员函数的局部变量的类型39.下列关于 C+预定义流对象的叙述中,正确的足_。(分数:1.00)A.cin 是 C+预定义的标准输入流对象B.cin 是 C+预定义的标准输入流类C.cout 是 C+预定义的标准输
19、入流对象D.cout 是 C+预定义的标准输入流类40.有如下语句序列: char str10; cinstr; 当从键盘输入“I love this game”时,str 中的字符串是_。(分数:1.00)A.“I love this game“B.“I love thi“C.“I love“D.“I“二、基本操作题(总题数:1,分数:18.00)41.请使用 VC6 或使用答题菜单打开 proj1 下的工程 proj1,其中有枚举 DOGCOLOR、狗类 Dog 和主函数main 的定义。程序中位于每个“/ERROR *found*”下的语句行有错误,请加以改正。改正后程序的输出结果应该是
20、: There is a white dog named Hoho. There is a black dog named Haha. There is a motley dog named Hihi. 注意:只修改每个/ERROR *found*下的那一行,不要改动程序中的其他内容。 #includeiostream using namespace std; /狗的颜色:黑、白、黄、褐、花、其他 enum DOGCOLOR BLACK, WHITE, YELLOW, BROWN, PIEBALD, OTHER; class Dog /狗类 DOGCOLOR color; char name2
21、0; static int count; public: Dog(char name, DOGCOLOR color) strcpy(this-name, name); /ERROR *found* strcpy(this-color, color); DOGCOLOR getColor()const return color; /ERROR *found* const char*getName()const return*name; const char*getColorString()const switch(color) case BLACK: return “black“: case
22、WHITE: return “white“: case YELLOW: return “yellow“: case BROWN: return “brown“: case PIEBALD: return “piebald“: return “motley“; void show()const cout“There is a“getColorString()“dog named“name“.“endl: ; int main() /ERROR *found* Dog dog1(“Hoho“, WHITE), dog2(“Haha“, BLACK); dog3(“Hihi“, OTHER); do
23、g1. show(); dog2. show(); dog3. show(); return 0; (分数:18.00)_三、简单应用题(总题数:1,分数:24.00)42.请使用 VC6 或使用答题菜单打开 proj2 下的工程 proj2,该工程中包含一个程序文件 main. cPP,其中有坐标点类 point、线段类 Line 和三角形类 Triangle 的定义,还有 main 函数的定义。程序中两点间距离的计算是按公式 实现的,三角形面积的计算是按公式 实现的,其中 (分数:24.00)_四、综合应用题(总题数:1,分数:18.00)43.请使用 VC6 或使用答题菜单打开 proj
24、3 下的工程 proj3,其中声明的 DataList 类,是一个用于表示数据表的类。sort 成员函数的功能是将当前数据表中的元素升序排列。请编写这个 sort 函数。程序的正确输出应为: 排序前:7, 1, 3, 11, 6, 9, 12, 10, 8, 4, 5, 2 排序后:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 要求: 补充编制的内容写在“/*333*”与“/*666*”两行之同。不得修改程序的其他部分。 注意:程序最后将结果输出到文件 out. dat 中。输出函数 writeToFile 已经编译为 obj 文件,并且在本程序调用。 /Data
25、List. h #includeiostream using namespace std; class DataList /数据表类 int len; double*d; public: DataList(int len, double data=NULL); DataList() deleted; int length()const return len;/数据表长度(即数据元素的个数) double getElement(int i)const return di; void sort();/数据表排序 void show()const;/显示数据表 ; void writeToFile(
26、char*, const DataList /main. cpp #include “DataList. h“ DataList:DataList(int len, double data): len(len) d=new doublelen; for(int i=0; ilen; i+) di=(data=NULL? 0.0: datai); void DataList:sort()/数据表排序 /*333* /*666* void DataList:show()const /显示数据表 for(int i=0; ilen-1; i+)coutdi“,“; coutdlen-1endl; i
27、nt main() double s=7, 1, 3, 11, 6, 9, 12, 10, 8, 4, 5, 2; DataList list(12, s); cout“排序前:“; list. show(); list. sort(); coutendl“排序后:“; list.show(); writeToFile(“ “, list); return 0; (分数:18.00)_二级 C+-19-1 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列数据结构中,属于非线性结构的是_。(分数:1.00)A.循环队列B.带链队列C.二叉树
28、 D.带链栈解析:解析 树是简单的非线性结构,所以二叉树作为树的一种也是一种非线性结构。2.下列数据结构中,能够按照“先进后出”原则存取数据的是_。(分数:1.00)A.循环队列B栈 C.队列D.二叉树解析:解析 栈是按先进后出的原则组织数据的。队列是先进先出的原则组织数据。3.对于循环队列,下列叙述中正确的是_。(分数:1.00)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队尾指针 解析:解析 循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构所以队头指针有时可能大于队尾
29、指针有时也可能小于队尾指针。4.算法的空间复杂度是指_。(分数:1.00)A.算法在执行过程中所需要的计算机存储空间 B.算法所处理的数据量C.算法程序中的语句或指令条数D.算法在执行过程中所需要的临时工作单元数解析:解析 算法的空间复杂度是指算法在执行过程中所需要的内存空间。所以选择 A。5.软件设计中划分模块的一个准则是_。(分数:1.00)A.低内聚低耦合B.高内聚低耦合 C.低内聚高耦合D.高内聚高耦合解析:解析 一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。6.下列选项中不属于结构化程序设计原则的是_。(分数:1.
30、00)A.可封装 B.自顶向下C.模块化D.逐步求精解析:解析 结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使刚 goto 语句,所以选择 A。7.软件详细设计产生的图如下: (分数:1.00)A.N-S 图B.PAD 图C.程序流程图 D.E-R 图解析:解析 N-S 图提出了用方框图来代替传统的程序流程图,所以 A 不对。PAD 图是问题分析图,它是继承程序流程图和方框图之后提出的又一种主要用于描述软件详细设计的图形表示工具,所以 B 不对。E-R 图足数据库中的用于表示 E-R 模型的图示工具,所以 D 不对。根据图中所示表示方法是进行软件详细设计时使用的程序流程图。8.数
31、据库管理系统是_。(分数:1.00)A.操作系统的一部分B.在操作系统支持下的系统软件 C.一种编译系统D.一种操作系统解析:解析 数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中数据组织、数据操纵、数据维护、控制及保护和数据服务等。是一种在操作系统之上的系统软件。9.在 E-R 图中,用来表示实体联系的图形是_。(分数:1.00)A.椭圆形B.矩形C.菱形 D.三角形解析:解析 在 E-R 图中实体集用矩形,属性用椭圆,联系用菱形。10.有三个关系 R,S 和 T 如下: R A B C a 1 2 b 2 1 c 3 1 S A B C d 3 2 T A B C a 1 2
32、b 2 1 C 3 1 d 3 2 其中关系 T 由关系 R 和 S 通过某种操作得到,该操作为_。(分数:1.00)A.选择B.投影C交D并 解析:解析 并关系 T 中包含了关系 R 与 S 中的所有元组,所以进行的是并的运算。11.下列符号中可以用做 C+标识符的是_。(分数:1.00)A._radius B.foobarC.elseD.3room解析:解析 本题考查 C+标识符的命名规则,其规则有如下几点:所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头;所有标识符不能使用 C+已有的关键字;大、小写字母表示不同意义,即代表不同的标识符。选项 B 包含了字符“”,选项 C
33、 是关键字,选项 D 不能以数字开头。故答案为 A。12.下列各组类型声明符中,含义相同的一组是_。(分数:1.00)A.unsigned long int 和 longB.signed short int 和 short C.unsigned short 和 shortD.short int 和 int解析:解析 本题考查整型变量的类型,A、C 选项中前者为无符号的,后者为有符号的,D 选项中short int 为 2 个字节,int 为 4 个字节。13.必须用一对大括号括起来的程序段是_。(分数:1.00)A.switch 语句中的 case 标号语句B.if 语句的分支C.循环语句的循
34、环体D.函数的函数体 解析:解析 本题考查 C+基本控制结构,A、B、C 三个选项巾的大括号不是必须的,而 D 选项中的函数体必须使用大括号。14.语句 int *p=定义了指针 p,与这个语句等效的语句序列是_。(分数:1.00)A.int *p; p= B.int *p; p=k;C.int *p; *p=D.int*p; *p=k;解析:解析 本题考查指针和地址,题目中定义了一个指向变量 k 的一个指针 p,那么与题目中等效的表达式 A 选项,即先定义一个指向整型的指针,然后指向 k 的地址。15.执行下列语句段后,输出字符“*”的个数是_。 for(int i=50; i1; i-=2
35、)cout“*“;(分数:1.00)A.24B.25 C.26D.50解析:解析 本题考查 for 循环语句,题目中每执行完循环体后,i 都会减 2,那么只有 50 到 2 之间的偶数才能输出“*”,所以总共输出 25 次。16.下列关于运算符重载的叙述中,错误的是_。(分数:1.00)A.有的运算符可以作为非成员函数重载B.所有的运算符都可以通过重载而被赋予新的含义 C.不得为重载的运算符函数的参数设置默认值D.有的运算符只能作为成员函数重载解析:解析 重载运算符的规则如下:C+不允许用户自己定义新的运算符,只能对已有的 C+运算符进行重载;C+不能重载的运算符只有 5 个;重载不能改变运算
36、符运算对象的个数;重载不能改变运算符的优先级和结合性;重载运算符的函数不能有默认的参数;重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是 C+的标准类型。所以答案为B。17.对 C+编译器区分重载函数无任何意义的信息是_。(分数:1.00)A.参数类型B.参数个数C.返回值类型 D.常成员函数关键字 const解析:解析 所谓函数重载是指同一个函数名可以对应多个函数的实现。每种实现对应一个函数体,这些函数的名字相同,其参数类型或个数不同,但不能出现函数返回值类型不同而参数类型和个数完全相同的重载。所以本题答案为 C。18.运算符重载时不需要保持的性
37、质是_。(分数:1.00)A.操作数个数B.操作数类型 C.优先级D.结合性解析:解析 重载运算符的规则如下:C+不允许用户自己定义新的运算符,只能对已有的 C+运算符进行重载;C+不能重载的运算符只有 5 个;重载不能改变运算符运算对象的个数;重载不能改变运算符的优先级和结合性;重载运算符的函数不能有默认的参数;重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是 C+的标准类型。所以答案为B。19.下列关于函数的描述中,错误的是_。(分数:1.00)A.函数可以没有返回值B.函数可以没有参数C.函数可以是一个类的成员D.函数不能被定义为模板 解析:
38、解析 本题考查函数的基础知识,函数可以没有返回值,没有参数,也可以是一个类的成员,函数可以定义为模板,即模板函数。20.关于函数重载,下列叙述中错误的是_。(分数:1.00)A.重载函数的函数名必须相同B.重载函数必须在参数个数或类型上有所不同C.重载函数的返回值类型必须相同 D.重载函数的函数体可以有所不同解析:解析 所谓函数重载是指同一个函数名可以对应多个函数的实现。每种实现对应一个函数体,这些函数的名字相同,其参数类型或个数不同,但不能出现函数返回值类型不同而参数类型和个数完全相同的重载。所以本题答案为 C。21.下列关于运算符重载的描述中,正确的是_。(分数:1.00)A.运算符重载为
39、成员函数时,若参数表中无参数,重载的是一元运算符 B.一元运算符只能作为成员函数重载C.二元运算符重载为非成员函数时,参数表中有一个参数D.C+中可以重载所有的运算符解析:解析 运算符重载为成员函数时,会省略一个参数,如果无参数,表明是一元运算符。一元运算符既可以作为成员函数重载,也可以作为非成员函数重载。二元运算符如果作为非成员函数,则参数表中必须有两个参数。C+有 5 个运算符不能重载,它们是:.(成员访问运算符)、. *(成员指针访问运算符)、::(域运算符)、sizeof(长度运算符)和?:(条件运算符)。故本题答案为 A。22.有如下函数定义: void func(int a, in
40、t b+; 若执行代码段: int x=0, y=1; func(x, y); 则变量 x 和 y 的值分别是_。(分数:1.00)A.0 和 1B.1 和 1C.0 和 2 D.1 和 2解析:解析 函数参数的 3 种传递方式:将变量名作为形参和实参,即传值方式;传递变量指针;引用形参。本题中实参 x 为传值方式,所以 x 的值不会改变;y 为引用形参,所以会改变。故本题答案为 C。23.对于一个类定义,下列叙述中错误的是_。(分数:1.00)A.如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数B.如果没有定义缺省的构造函数,编译器一定将生成一个缺省的构造函数 C.如果没有定义构造函数
41、,编译器将生成一个缺省的构造函数和一个拷贝构造函数D.如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数解析:解析 本题考查构造函数和复制构造函数,如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数,如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数。如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数。24.有如下头文件: int f1(); static int f2(); class MA public: int f3(); static int f4(); ; 在所描述的函数中,具有隐含的 this 指针的是_。(分数:1.00)Af1
42、Bf2Cf3 Df4解析:解析 只有类的非静态成员函数才隐含 this 指针,其作用域是类内部,当类的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数,而不必一定写上this。所以本题答案为 C。25.下列关于类定义的说法中,正确的是_。(分数:1.00)A.类定义中包括数据成员和函数成员的声明 B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义解析:解析 类的成员的缺省访问权限是私有的,数据成员可以是私有,可以是公用的,也可以是受保护的。类的成员函数可以在类内定义。26.如果派生类以 protected
43、方式继承基类,则原基类的 protected 成员和 public 成员在派生类中的访问属性分别是_。(分数:1.00)A.public 和 publicB.public 和 protectedC.protected 和 publicD.protected 和 protected 解析:解析 本题考查保护继承中派生类对基类的访问属性,在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有,所以本题答案为 D。27.下列有关继承和派生的叙述中,正确的是_。(分数:1.00)A.派生类不能访问基类的保护成员B.作为虚基类的类不能被实例化C.派生类应当向基类的构造函数
44、传递参数 D.虚函数必须在派生类中重新实现解析:解析 派生类可以访问基类的保护成员,而不能访问基类的私有成员。作为虚基类的类可以被实例化。虚函数如果没有派生类中重新实现,那么仍然使用基类的成员函数。28.有如下类定义: class AA int a; public: AA(int n=0): a(n) ; class BB: public AA public: BB(int n)_ ; 其中横线处缺失的部分是_。(分数:1.00)A.:a(n) B.:AA(n) C.a(n);D.a=n;解析:解析 本题考查公用继承对基类成员的访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访
45、问属性,其私有成员仍为基类私有,本题中若要给派生类继承下来基类的私有成员赋值,那么只能调用基类的成员函数来对它赋值,所以本题答案为 B。29.有如下程序: #includeiostream using namespace std; class CD public: CD() cout“C“; private: char name80; ; int main() CD a, *b, d2; return 0; 执行这个程序的输出结果是_。(分数:1.00)A.CCCCB.CCC C.CCDC解析:解析 本题考查类的析构函数,题目中定义了类的一个对象 a,对象指针*,对象数组 d2,当程序执行完后,析构函数执行了 3 次,输出“CCC”,对象指针不会执行析构函数。所以本题答案为 B。30.有如下程序: #includeiostream using namespace std; class MyClass public: MyClass() +count; MyClass() -count; static int getCount() return count; private: static int count; ; in