1、C+语言笔试-18 及答案解析(总分: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.某二叉树有 5 个度为 2 的结点,则该二叉树中的叶子结点数是_。A10 B8 C6 D4(分数:1.00)A.B.C.D.4.下列排序方法中,最坏情况下比较次数最少的是_。A冒泡排序
2、 B简单选择排序 C直接插入排序 D堆排序(分数:1.00)A.B.C.D.5.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是_。A编译程序 B操作系统 C教务管理系统 D汇编程序(分数:1.00)A.B.C.D.6.下面叙述中错误的是_。A软件测试的目的是发现错误并改正错误B对被调试的程序进行“错误定位”是程序调试的必要步骤C程序调试通常也称为 DebugD软件测试应严格执行测试计划,排除测试的随意性(分数:1.00)A.B.C.D.7.耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是_。A提高耦合性降低内聚性有利于提高模块的独立性B降低耦
3、合性提高内聚性有利于提高模块的独立性C耦合性是指一个模块内部各个元素间彼此结合的紧密程度D内聚性是指模块间互相连接的紧密程度(分数:1.00)A.B.C.D.8.数据库应用系统中的核心问题是_。A数据库设计 B数据库系统设计 C数据库维护 D数据库管理员培训(分数:1.00)A.B.C.D.9.有两个关系 R,S 如下:RABCa32b01c21SABa3b0c2由关系 R 通过运算得到关系 S,则所使用的运算为_。A选择 B投影 C插入 D连接(分数:1.00)A.B.C.D.10.将 E-R 图转换为关系模式时,实体和联系都可以表示为_。A属性 B键 C关系 D域(分数:1.00)A.B.
4、C.D.11.字面常量 42、4.2、42L 的数据类型分别是_。Along、double、int Blong、float、int Cint、double、long Dint、float、long(分数:1.00)A.B.C.D.12.执行下列语句段后,输出字符“*”的个数是_。for(int i=50;i1;-i)cout*;A48 B49 C50 D51(分数:1.00)A.B.C.D.13.有如下程序段:int i=0,j=1;nt /r=j;/int*p=i;/*p=;/其中会产生编译错误的语句是_。A B C D(分数:1.00)A.B.C.D.14.必须用一对大括号括起来的程序段是
5、_。A switch 语句中的 case 标号语句 Bif 语句的分支C循环语句的循环体 D函数的函数体(分数:1.00)A.B.C.D.15.下列符号中不属于 C+关键字的是_。Afriend Bnamespace Ccontinue Dbyte(分数:1.00)A.B.C.D.16.下列有关函数重载的叙述中,错误的是_。A函数重载就是用相同的函数名定义多个函数B重载函数的参数列表必须不同C重载函数的返回值类型必须不同D重载函数的参数可以带有默认值(分数:1.00)A.B.C.D.17.下列有关运算符重载的叙述中,正确的是_。A运算符重载是多态性的一种表现BC+中可以通过运算符重载创造新的运
6、算符CC+中所有运算符都可以作为非成员函数重载D重载运算符时可以改变其结合性(分数:1.00)A.B.C.D.18.在下列原型所示的 C+函数中,按“传值”方式传递参数的是_。Avoid f1(int x); Bvoid f2(int*x);Cvoid B(const int*x); Dvoid f4(int(分数:1.00)A.B.C.D.19.将前缀运算符“-”重载为非成员函数,下列原型中能正确用于类中说明的是_。ADecr BDecr operator-(DecrCfriend Decr Dfriend Decr operator-(Decr(分数:1.00)A.B.C.D.20.有如下
7、函数定义:void func(int a,intb+;若执行代码段:int x=0,y=1;func(x,y);则变量 x 和 y 的值分别是_。A0 和 1 B1 和 1 C0 和 2 D1 和 2(分数:1.00)A.B.C.D.21.下列运算符中,不能被重载的是_。Aclass Apublic:static int a;void init()a=1;A(int a=2)init();a+;int A:a=0;A obj;int main()coutobj.a;return 0;运行时输出的结果是_。A0 B1 C2 D3(分数:1.00)A.B.C.D.25.以下关键字不能用来声明类的访
8、问权限的是_。Apublic Bstatic Cprotected Dprivate(分数:1.00)A.B.C.D.26.下列关于派生类构造函数和析构函数的说法中,错误的是_。A派生类的构造函数会隐含调用基类的构造函数B如果基类中没有缺省构造函数,那么派生类必须定义构造函数C在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数(分数:1.00)A.B.C.D.27.派生类的成员函数不能访问基类的_。A公有成员和保护成员 B公有成员C私有成员 D保护成员(分数:1.00)A.B.C.D.28.有如下类定义:class
9、 AAint a;Public:AA(int n=0):a(n);class BB:public AApublic:BB(int n)_;其中横线处的缺失部分是_。A:a(n) B:AA(n) Ca(n); Da=n;(分数:1.00)A.B.C.D.29.有如下程序:#includeiostreamusing namespace std;class testprivate:int a;public:test()cout“constructor“endl;test(int a)coutaendl;test(const test cout“copy constructor“endl;test()
10、cout“destructor“endl;int main()test A(3);return 0;执行这个程序的输出结果是_。A3BconstructordestructorCcopy constructordestructorD3destructor(分数:1.00)A.B.C.D.30.若有如下类声明:class MyClasspublic:MyClass()cout1;执行下列语句MyClass a,b2,*p2;程序的输出结果是_。A11 B111 C1111 D11111(分数:1.00)A.B.C.D.31.有如下程序:#includeiostreamusing namespac
11、e std;class Pointpublic:static int number;public:Point()number+;Point()number-;int Point:number=0;int main()Point*ptr;Point A,B;Point*ptr_point=new Point3;ptr=ptr_point;Point C;coutPoint:numberendl;deleteptr;return 0;执行这个程序的输出结果是_。A3 B4 C6 D7(分数:1.00)A.B.C.D.32.有如下程序:#includeiostreamusing namespace
12、std;class Samplefriend long fun(Sample s);public:Sample(long a)x=a;private:long x;long fun(Sample s)if(s.x2)return 1;return s.x*fun(Sample(s.x-1);int main()int sum=0;for(int i=0;i6;i+)sum+=fun(Sample(i);coutsum;return 0;执行这个程序的输出结果是_。A120 B16 C154 D34(分数:1.00)A.B.C.D.33.有如下程序:class Basepublic:int da
13、ta;class Derived1:public Base;class Derived2:protected Base;int main()Derived1 d1;Derived2 d2;d1.data=0;/d2.data=0;/return 0;下列关于程序编译结果的描述中,正确的是_。A皆无编译错误 B有编译错误,无编译错误C无编译错误,有编译错误 D皆有编译错误(分数:1.00)A.B.C.D.34.有如下程序:#includeiostreamusing namespace std;class Apublic:A(int i)x=i;void dispa()coutx,;pnvate:
14、int x;class B:public Apublic:B(int i):A(i+10)x=i;void dispb()dispa();coutxendl;private:int x:;int main()B b(2);b.dispb();return 0;执行这个程序的输出结果是_。A10,2 B12,10 C12,2 D2,2(分数:1.00)A.B.C.D.35.有如下程序:#includeiostreamusing namespace std;class Musicpublic:void setTitle(char*str)strcpy(title,str);protected:ch
15、ar type10;pnvate;char title20;:class Jazz:public Musicpublic:void set(char*str)strcpy(type,“Jazz“);/strcpy(title,str);/;下列叙述中正确的是_。A程序编译正确 B程序编译时语句出错C程序编译时语句出错 D程序编译时语句和都出错(分数:1.00)A.B.C.D.36.有如下程序:#includeiostreamusing namespace std;class Bookpublic:Book(char*t=“ “)strcpy(title,t);_pnvate:char titl
16、e40;class Novel:public Bookpublic:Novel(char*t=“ “):Book(t)char*Category()constretum“文学“;int main()Book*pb;pb=new Novel();coutpb-Category();delete pb;retum 0;若程序运行时输出结果是“文学“,则横线处缺失的语句是_。Achar*Category(); Bchar*Category()const;Cvirtual char*Category()const; Dvirtual char*Category()const=0;(分数:1.00)A.
17、B.C.D.37.如下函数模板:template class T T square(T x) return x*x;其中 T 是_。A函数形参 B函数实参 C模板形参 D模板实参(分数:1.00)A.B.C.D.38.下列函数模板的定义中,合法的是_。Atemplate typename T T abs(T x) return x0? -x:x;Btemplate class T T abs(T x) return x0? -x:x;Ctemplate T class T abs(T x)return x0? -x:x;Dtemplate T abs(T x)return x0? -x:x;(
18、分数:1.00)A.B.C.D.39.在 C+中,cin 是一个_。A类 B对象 C模板 D函数(分数:1.00)A.B.C.D.40.下列控制格式输入/输出的操作符中,能够设置浮点数精度的是_。Asetprecision Bsetw Csetfill Dshowpoint(分数:1.00)A.B.C.D.二、操作题(总题数:3,分数:60.00)41.请使用 VC6 或使用答题菜单打开考生文件夹 proj1 下的工程 projl,该工程含有一个源程序文件proj1.cpp。其中位于每个注释“/ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:The va
19、lue is 10注意:只修改注释“/ERROR *found*”的下一行语句,不要改动程序中的其他内容。/proj1.cpp#include iostreamusing namespace std;class MyClassint value;public:/ERROR*found*void MyClass (int val):value(val)int GetValue()constreturn value;void SetValue(int val);/ERROR*found*inline void SetValue(int val)value int main ()MyClass ob
20、j(0);obj.SetValue(10);/ERROR*found*下列 i 语句功能是输出 obj 的成员 value 的值cout“The value is“obj.valueendl;return 0;(分数:20.00)_42.请使用 VC6 或使用答题菜单打开考生文件夹 proj2 下的工程 proj2,此工程包含有一个源程序文件proj2.cpp,其中定义了 Stack 类和 ArrayStack 类。Stack 是一个用于表示数据结构“栈”的类,栈中的元素是字符型数据。Stack 为抽象类,它只定义了栈的用户接口,如下所示:公有成员函数 功能push 入栈:在栈顶位置添加一个元
21、素pop 退栈:取出并返回栈顶元素ArrayStack 是 Stack 的派生类,它实现了 Stack 定义的接口。ArrayStack 内部使用动态分配的字符数组作为栈元素的存储空间。数据成员 maxSize 表示的是栈的最大容量,top 用于记录栈顶的位置。成员函数push 和 pop 分别实现具体的入栈和退栈操作。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述功能。此程序的正确输出结果应为:a,b,cc,b,a注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“/*found*”。/proj2.cpp#include iostreamusing nam
22、espace std;class Stack public:virtual void push (char c)=0;virtual char pop()=0;class ArrayStack:public Stackchar*p;int maxSize;int top;public:ArrayStack(int 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
23、(top=0) cerr“Underflow! /n“;return/0;top-;/*found*_;void f (Stackcoutch0“,“ch1“,“ch2endl;sRef.push(ch0);sRef.push(ch1);sRef.push(ch2);coutsRef.pop()endl;int main ()ArrayStack as(10);return 0;(分数:20.00)_43.请使用 VC6 或使用答题菜单打开考生目录 proj3 下的工程文件 proj3,此工程中包含一个源程序文件 proj3.cpp,补充编制 C+程序 proj3.cpp,其功能是读取文本文件
24、 in.dat 中的全部内容,将文本存放到 doc 类的对象 myDoc 中。然后将 myDoc 中的字符序列反转,并输出到文件 out.dat 中。文件 in.dat 的长度不大于 1000 字节。要求:补充编制的内容写在“/*333*”与“*66666*”两行之间。实现将 myDoc 中的字符序列反转,并将反转后的序列在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件 out.dat 中,输出函数 writeToFile 已经给出并且调用。/proj3.cpp#includeiostream#includefstream#includecstringusing name
25、space std;class docprivate:char*str;/文本字符串首地址int length;/文本字符个数public:/构造函数,读取文件内容,用于初始化新对象,filename 是文件名字符串首地址doc(char*filename);void reverse();/将字符序列反转doc();void writeToFile(char*filename);doc:doc(char*filename)ifstream myFile(filename);int len=1001,tmp;str=new charlen;length=0;while(tmp=myFile.ge
26、t()!=EOF)strlength+=tmp;strlength=/0;myFile.close();void doc:reverse()/将数组 str 中的 length 个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个/字符交换/*333*/*666*doc:doc()deletestr;void doc:writeToFile (char *filename)ofstream outFile (filename)joutFilestr;outFile.close();void main()doc myDoc(“in.dat);myDoc.reverse();myDoc.
27、writeToFile(“out.dat“);(分数:20.00)_C+语言笔试-18 答案解析(总分:100.00,做题时间:90 分钟)一、单项选择题(总题数:40,分数:40.00)1.下列叙述中正确的是_。A栈是“先进先出”的线性表B队列是“先进后出”的线性表C循环队列是非线性结构D有序线性表既可以采用顺序存储结构,也可以采用链式存储结构(分数:1.00)A.B.C.D. 解析:解析 栈是先进后出的线性表,所以 A 错误;队列是先进先出的线性表,所以 B 错误;循环队列是线性结构的线性表,所以 C 错误。2.支持子程序调用的数据结构是_。A栈 B树 C队列 D二叉树(分数:1.00)A
28、. B.C.D.解析:解析 栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为 A。3.某二叉树有 5 个度为 2 的结点,则该二叉树中的叶子结点数是_。A10 B8 C6 D4(分数:1.00)A.B.C. D.解析:解析 根据二叉树的基本性质 3:在任意一颗二叉树中,度为 O 的叶子结点总是比度为 2 的结点多一个,所以本题中是 5+1=6 个。4.下列排序方法中,最坏情况下比较次数最少的是_。A冒泡排序 B
29、简单选择排序 C直接插入排序 D堆排序(分数:1.00)A.B.C.D. 解析:解析 冒泡排序、直接插入排序与简单选择排序法在最坏情况下均需要比较 n(n-1)/2 次,而堆排序在最坏情况下需要比较的次数是 nlog2n。5.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是_。A编译程序 B操作系统 C教务管理系统 D汇编程序(分数:1.00)A.B.C. D.解析:解析 编译软件、操作系统、汇编程序都属于系统软件,只有 C 教务管理系统才是应用软件。6.下面叙述中错误的是_。A软件测试的目的是发现错误并改正错误B对被调试的程序进行“错误定位”是程序调试的必
30、要步骤C程序调试通常也称为 DebugD软件测试应严格执行测试计划,排除测试的随意性(分数:1.00)A. B.C.D.解析:解析 软件测试的目的是为了发现错误而执行程序的过程,并不涉及改正错误,所以选项 A 错误。程序调试的基本步骤有:错误定位、修改设计和代码,以排除错误、进行回归测试,防止引进新的错误。程序调试通常称为 Debug,即排错。软件测试的基本准则有:所有测试都应追溯到需求、严格执行测试计划,排除测试的随意性、充分注意测试中的群集现象、程序员应避免检查自己的程序、穷举测试不可能、妥善保存测试计划等文件。7.耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是_。A提高耦
31、合性降低内聚性有利于提高模块的独立性B降低耦合性提高内聚性有利于提高模块的独立性C耦合性是指一个模块内部各个元素间彼此结合的紧密程度D内聚性是指模块间互相连接的紧密程度(分数:1.00)A.B. C.D.解析:解析 模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。一般较优秀的软件设计,应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性,所以 A 错误,B 正确。耦合性是模块间互相连接的紧密程度的度量而内聚性是指一个模块内部各个元素间彼此结合的紧密程度,所以 C 与 D 错误。8.数据库应用系统中的核心问题是_。A
32、数据库设计 B数据库系统设计 C数据库维护 D数据库管理员培训(分数:1.00)A. B.C.D.解析:解析 数据库应用系统中的核心问题是数据库的设计。9.有两个关系 R,S 如下:RABCa32b01c21SABa3b0c2由关系 R 通过运算得到关系 S,则所使用的运算为_。A选择 B投影 C插入 D连接(分数:1.00)A.B. C.D.解析:解析 投影运算是指对于关系内的域指定可引入新的运算。本题中 S 是在原有关系 R 的内部进行的,是由 R 中原有的那些域的列所组成的关系。所以选择 B。10.将 E-R 图转换为关系模式时,实体和联系都可以表示为_。A属性 B键 C关系 D域(分数
33、:1.00)A.B.C. D.解析:解析 从 E-R 图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R 图中属性也可以转换成关系的属性。11.字面常量 42、4.2、42L 的数据类型分别是_。Along、double、int Blong、float、int Cint、double、long Dint、float、long(分数:1.00)A.B.C. D.解析:解析 本题考查整型变量的类型和浮点变量的类型,42 默认为 int 型数据,42 后面加上 L 后,表示 long 型数据,4.2 默认为 double 型数据。12.执行下列语句段后,输出字符“*”的个数是_。fo
34、r(int i=50;i1;-i)cout*;A48 B49 C50 D51(分数:1.00)A.B. C.D.解析:解析 本题考查 for 循环语句,-i 表示用之前先减 1,那么这个 for 循环语句只有 50 到 2 时才会输出“*”,所以总共输出 49 次。13.有如下程序段:int i=0,j=1;nt /r=j;/int*p=i;/*p=;/其中会产生编译错误的语句是_。A B C D(分数:1.00)A. B.C.D.解析:解析 本题考查指针和引用。为引用,使用正确;中 Bvoid f2(int*x);Cvoid B(const int*x); Dvoid f4(int(分数:1
35、.00)A. B.C.D.解析:解析 函数参数的 3 种传递方式:将变量名作为形参和实参,即传值方式;传递变量指针;引用形参。其中 B、C 选项都是传递变量指针,D 选项为引用形参,所以本题答案为 A。19.将前缀运算符“-”重载为非成员函数,下列原型中能正确用于类中说明的是_。ADecr BDecr operator-(DecrCfriend Decr Dfriend Decr operator-(Decr(分数:1.00)A.B.C.D. 解析:解析 非成员函数重载用友元函数的形式实现,“-”运算符重载分为前置和后置两种重载方式。用友元函数来实现“-”运算符的重载时,前置“-”运算符的重载
36、的一般格式为:friendtypeoperator-(ClassNameb+;若执行代码段:int x=0,y=1;func(x,y);则变量 x 和 y 的值分别是_。A0 和 1 B1 和 1 C0 和 2 D1 和 2(分数:1.00)A.B.C. D.解析:解析 函数参数的 3 种传递方式:将变量名作为形参和实参,即传值方式;传递变量指针;引用形参。本题中实参 x 为传值方式,所以 x 的值不会改变;y 为引用形参,所以会改变。故本题答案为 C。21.下列运算符中,不能被重载的是_。Aclass Apublic:static int a;void init()a=1;A(int a=2
37、)init();a+;int A:a=0;A obj;int main()coutobj.a;return 0;运行时输出的结果是_。A0 B1 C2 D3(分数:1.00)A.B. C.D.解析:解析 本题考查构造函数,本题中对类中的 a 数据成员先是赋值为 0,当定义了对象 obj 时,执行构造函数,将 a 的值变为了 1,所以输出 1。25.以下关键字不能用来声明类的访问权限的是_。Apublic Bstatic Cprotected Dprivate(分数:1.00)A.B. C.D.解析:解析 类的成员访问权限有 3 种:public(公用)、protected(保护)、privat
38、e(私有)。26.下列关于派生类构造函数和析构函数的说法中,错误的是_。A派生类的构造函数会隐含调用基类的构造函数B如果基类中没有缺省构造函数,那么派生类必须定义构造函数C在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数(分数:1.00)A.B.C.D. 解析:解析 在销毁派生类对象时,先调用派生类的析构函数,再调用基类的析构函数。27.派生类的成员函数不能访问基类的_。A公有成员和保护成员 B公有成员C私有成员 D保护成员(分数:1.00)A.B.C. D.解析:解析 本题考查 3 种继承方式,其中,基类的私有
39、成员始终为基类私有。所以派生类无法访问基类的私有成员。本题答案为 C。28.有如下类定义:class AAint a;Public:AA(int n=0):a(n);class BB:public AApublic:BB(int n)_;其中横线处的缺失部分是_。A:a(n) B:AA(n) Ca(n); Da=n;(分数:1.00)A.B. C.D.解析:解析 本题考查公用继承对基类成员的访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有,本题中若要给派生类继承下来基类的私有成员赋值,那么只能调用基类的成员函数来对它赋值,成员变量默认的访问权限为
40、私有,即 a 为私有变量。所以本题答案为 B。29.有如下程序:#includeiostreamusing namespace std;class testprivate:int a;public:test()cout“constructor“endl;test(int a)coutaendl;test(const test cout“copy constructor“endl;test()cout“destructor“endl;int main()test A(3);return 0;执行这个程序的输出结果是_。A3BconstructordestructorCcopy construct
41、ordestructorD3destructor(分数:1.00)A.B.C.D. 解析:解析 本题考查默认构造函数和带参数的构造函数以及析构函数,本题中定义了一个对象 A(3),对象带着参数,所以执行带参数的构造函数,输出 3,然后执行析构函数,输出 destructor。所以本题答案为 D。30.若有如下类声明:class MyClasspublic:MyClass()cout1;执行下列语句MyClass a,b2,*p2;程序的输出结果是_。A11 B111 C1111 D11111(分数:1.00)A.B. C.D.解析:解析 本题考查默认构造函数和带参数的构造函数,题目中定义一个对
42、象 a 以及对象数组 b2,共执行 3 次构造函数,对象指针不调用构造函数。所以本题答案为 B。31.有如下程序:#includeiostreamusing namespace std;class Pointpublic:static int number;public:Point()number+;Point()number-;int Point:number=0;int main()Point*ptr;Point A,B;Point*ptr_point=new Point3;ptr=ptr_point;Point C;coutPoint:numberendl;deleteptr;retur
43、n 0;执行这个程序的输出结果是_。A3 B4 C6 D7(分数:1.00)A.B.C. D.解析:解析 本题考查默认构造函数,题目中定义一个对象 A、B 以及对象数组 Point3,又定义了对象 C,共执行 6 次构造函数,number 变为了 6,所以本题答案为 C。32.有如下程序:#includeiostreamusing namespace std;class Samplefriend long fun(Sample s);public:Sample(long a)x=a;private:long x;long fun(Sample s)if(s.x2)return 1;return
44、 s.x*fun(Sample(s.x-1);int main()int sum=0;for(int i=0;i6;i+)sum+=fun(Sample(i);coutsum;return 0;执行这个程序的输出结果是_。A120 B16 C154 D34(分数:1.00)A.B.C. D.解析:解析 本题考查默认构造函数,当 i=0、1 时,fun(Sample(i)为 1;当 i=2 时,fun(Sample(i)为 2;当 i=3 时,fun(Sample(i)为 6;当 i=4 时,fun(Sample(i)为 24;当 i=5 时,fun(Sample(i)为120。所以总和为 154。33.有如下程序:class Basepublic:int data;class Derived1:public Base;class Derived2:protected Base;int main()Derived1 d1;Derived2 d2;d1.data=0;/d2.data=0;/return 0;下列关于程序编译结果的描述中,正确的是_。A皆无编译错误 B有编译错误,无编译错误C无编译错误,有编译错误 D皆有编译错误(分数:1.00)A.B.C. D.解析:解析 本题考查公用继承和保护继承对基类成员的访问属