1、二级 C+笔试-18 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.在 E-R 图中,用来表示实体之间是联系的图形是(分数:2.00)A.矩形B.椭圆形C.菱形D.平行四边形2.有如下程序: #include iostream using namespace std; class A public: A(int i)X=i; void dispa( )coutx,; private: int x; ; class B:public A public: B(int i):A(i+10)x=i; void dispb( )dispa( );c
2、outxendl; private: int x; ; int main( ) B b(2); b.dispb( ); return 0; 程序的输出结果是(分数:2.00)_3.下列关于虚函数的描述中,正确的是(分数:2.00)A.虚函数是一个 static 类型的成员函数B.虚函数是一个非成员函数C.基类中采用 virtual 说明一个虚函数后,派生类中定义相同类型的函数时可不必加 virtualD.派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数或类型4.有如下语句序列: int k=0: d0k+=5;cout$;wbile(k19); while(k-0)cout*; 执行
3、上面的语句后,序列输出字符$和*的个数分别是(分数:2.00)_5.下列函数中对调用它的函数没有起到任何作用的是(分数:2.00)A.void f1(double x)-x;B.double f2(double x)return x-1.5;C.void f3(double x)-x;D.double f4(double *x)-*x;return*x;6.有如下程序: #include iostream using namespaee std; class Point public: static int number; Point( )number+; Point( )number-; ;
4、 int Point:number=0; void main( ) Point*ptr; Point A,B; Point*ptr_point=new Point3; ptr=ptr_point; Point C; coutPoint:numberendl; delete ptr; 程序的输出结果是(分数:2.00)A.3B.4C.6D.77.已知 n 是一个 int 型变量,下列语句中错误的是(分数:2.00)A.long*p=new longn;B.long pn;C.long*p=new long(n);D.long p10;8.有如下函数模板声明: templatetypename T
5、 T Max(T a,T B) return(a=B) ?a:b; 下列对函数模板 Max 的调用中错误的是(分数:2.00)A.Max(3.5,4.5)B.Max(3.5,4);C.Maxdouble(3.5,4.5)D.Maxdouble(3.5,4)9.在 C+中,实现封装性需借助于(分数:2.00)A.枚举B.类C.数组D.函数10.针对数组定义 int data10;,下列叙述中错误的是(分数:2.00)A.用*data 可访问到数组的首元素B.用 data9可访问到数组的末元素C.用 data10访问数组元素会超出数组的边界D.data 共有 10 个元素,其首元素是 data11
6、1.在下列关系运算中,不改变关系表中的属性个数,但能减少元组个数的是(分数:2.00)A.并B.交C.投影D.笛卡儿乘积12.若有类声明: class MyClass public: MyClass( )cout1; ; 执行下列语句 MyClass a,b2,*P2; 以后,程序的输出结果是(分数:2.00)A.11B.111C.1111D.1111113.要定义数组 A,使得其中每个元素的数据依次为 3、9、4、8、0、0、0,错误的定义语句是(分数:2.00)_14.有如下程序: #include iostream using namespace std; class test priv
7、ate: int a; public: test( )cout“constructor“endl; test(int(分数:2.00)A.coutaendl; test(const test _test) a=_testa; cout“copy constructor“endl; test()cout“destructor“endl; ; int main( ) test A(3) return 0; 程序的输出结果是 A) 3destructorB.constructordestructorC.copy constructordestructorD.315.虚函数支持多态调用,一个基类的指针
8、可以指向派生类的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数,而非虚函数不支持多态调用。有如下程序: #include iostream using namespaee std; class Base public: virtual void f( )cout“f0+“; void g( )cout“gO+“; ; class Derived:public Base public: void f( )cout“f+“; void g( )cout“g+“; ; int main( ) Derived d; Base*P=d: p-f( );p-g( ); retu
9、rn 0; 程序的输出结果是(分数:2.00)A.f+g+B.f0+g+C.f+g0+D.f0+g0+16.如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制: #include iostream using namespace std; class Base int a,b; public: Base(int x,inty)a=x;b=y; void show( )couta,bendl; ; class Derived:public Base int C,d; public: Derived(int x,int y,in
10、t z,intm):Base(x,y)c=z;d=m; void show( )coutc,dendl; int main( ) Base BI(50,50),*pb; Derived D1(10,20,30,40); pb= Point C; coutPoint:numberendl; delete ptr; 程序的输出结果是(分数:2.00)A.3B.4C.6 D.7解析:解析 只有在创建对象时才会调用类的构造函数,在定义指针时不会调用构造函数,只有给指针new 一个地址时会调用构造函数,所以本程序中一共生成了 6 个 Point 对象(A,B,C,newPoint3)。number 作为
11、静态数据成员,被同一类的不同对象所共享,故结果为 6。7.已知 n 是一个 int 型变量,下列语句中错误的是(分数:2.00)A.long*p=new longn;B.long pn; C.long*p=new long(n);D.long p10;解析:解析 对数组定义为普通数组时,要求数组的下标是常表达式,若定义成数组指针则不需要指定数组的大小。8.有如下函数模板声明: templatetypename T T Max(T a,T B) return(a=B) ?a:b; 下列对函数模板 Max 的调用中错误的是(分数:2.00)A.Max(3.5,4.5)B.Max(3.5,4); C
12、.Maxdouble(3.5,4.5)D.Maxdouble(3.5,4)解析:解析 在引用函数模板时,如果没在函数名和参数之间加上类型参数,就默认表示参数类型严格按照模板定义的类型匹配;如果在函数名和参数之间加上了类型参数,则对实参自动进行类型转换。9.在 C+中,实现封装性需借助于(分数:2.00)A.枚举B.类 C.数组D.函数解析:解析 类的三大特性是:封装、继承、多态。C+中实现信息的封装主要靠类的封装特性来实现。10.针对数组定义 int data10;,下列叙述中错误的是(分数:2.00)A.用*data 可访问到数组的首元素B.用 data9可访问到数组的末元素C.用 data
13、10访问数组元素会超出数组的边界D.data 共有 10 个元素,其首元素是 data1 解析:解析 在 C+中,数组的下标为 0-1,如果定义数组指针,则指针刚开始时是指向数组的头元素。11.在下列关系运算中,不改变关系表中的属性个数,但能减少元组个数的是(分数:2.00)A.并B.交 C.投影D.笛卡儿乘积解析:解析 本题考查数据库的关系运算。两个关系的并运算是指将第一个关系的元组加到第二个关系中,生成新的关系。因此,并运算不改变关系表中的属性个数,也不能减少元组个数。两个关系的交运算是包含同时出现在第一和第二个关系中的元组的新关系。因此,交运算不改变关系表中的属性个数,但能减少元组个数。
14、投影是一元关系操作。投影操作选取关系的某些属性,这个操作是对一个关系进行垂直分割,消去某些属性,并重新安排属性的顺序,再删除重复的元组。因此,投影运算既可以减少关系表中的属性个数,也可以减少元组个数。两个关系的笛卡儿积是指一个关系中的每个元组和第二个关系的每个元组连接。因此,笛卡儿积运算能够增加元组属性的个数。在上述 4 种运算中,交运算不改变关系表中的属性个数但能减少元组个数。12.若有类声明: class MyClass public: MyClass( )cout1; ; 执行下列语句 MyClass a,b2,*P2; 以后,程序的输出结果是(分数:2.00)A.11B.111 C.1
15、111D.11111解析:解析 只有在创建对象时才会调用类的构造函数,在定义指针时不会调用构造函数,本程序共生成了 3 个同类对象 a,b2。13.要定义数组 A,使得其中每个元素的数据依次为 3、9、4、8、0、0、0,错误的定义语句是(分数:2.00)_解析:解析 采用 int A =3,4,9,814.有如下程序: #include iostream using namespace std; class test private: int a; public: test( )cout“constructor“endl; test(int(分数:2.00)A.coutaendl; test
16、(const test _test) a=_testa; cout“copy constructor“endl; test()cout“destructor“endl; ; int main( ) test A(3) return 0; 程序的输出结果是 A) 3destructor B.constructordestructorC.copy constructordestructorD.3解析:解析 test 的构造函数重载,test A3调用 test(int A) 函数,然后删除时调用析构函数,故输出选项 A。15.虚函数支持多态调用,一个基类的指针可以指向派生类的对象,而且通过这样的指
17、针调用虚函数时,被调用的是指针所指的实际对象的虚函数,而非虚函数不支持多态调用。有如下程序: #include iostream using namespaee std; class Base public: virtual void f( )cout“f0+“; void g( )cout“gO+“; ; class Derived:public Base public: void f( )cout“f+“; void g( )cout“g+“; ; int main( ) Derived d; Base*P=d: p-f( );p-g( ); return 0; 程序的输出结果是(分数:2
18、.00)A.f+g+B.f0+g+C.f+g0+ D.f0+g0+解析:解析 类指针可以指向派生类对象,但是只能访问基类的数据成员和成员函数。f( )作为虚函数,在派生类中被重新定义,可以通过基类指针或者引用来访问基类和派生类中的同名函数。16.如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制: #include iostream using namespace std; class Base int a,b; public: Base(int x,inty)a=x;b=y; void show( )couta,bendl
19、; ; class Derived:public Base int C,d; public: Derived(int x,int y,int z,intm):Base(x,y)c=z;d=m; void show( )coutc,dendl; int main( ) Base BI(50,50),*pb; Derived D1(10,20,30,40); pb=&D1; pb-show( ); return 0; 程序的输出结果是(分数:2.00)A.10,20 B.30,40C.20,30D.50,50解析:解析 pb 作为基类指针,可以指向派生类对象,但是它只能访问基类的成员函数,而不能访
20、问派生类的成员函数,所以 pb-show( );访问的是基类的 show( )函数,故打印 10,20。17.下列函数模板的定义中,合法的是(分数:2.00)_解析:解析 函数模板定义的一般格式为: Templatetypename 类型参数 返回类型 函数名(模板形参表) 函数体18.下列对列的叙述中,正确的是(分数:2.00)A.队列属于非线性表B.队列按“先进后出”的原则组织数据C.队列在队尾删除数据D.队列按“先进先出”原则组织数据 解析:解析 本题考查数据结构中队列的基本知识。队列是一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队列具有先进先出的特性。在队列
21、中,允许插入元素的一端叫做队尾,允许删除元素的一端则称为队头。19.某二叉树中有 n 个度为 2 的结点,则该二叉树中的叶子结点数为(分数:2.00)A.n+1 B.n-1C.2nD.n/2解析:解析 本题考查数据结构中二又树的性质。二叉树满足如下一条性质,即:对任意一棵二叉树,若终端结点(即叶子结点)数为 n0,而其度数为 2 的结点数为 n2,则 n0=n2+1。根据这条性质可知,若二叉树中有 n 个度为 2 的结点,则该二叉树中的叶子结点数为 n+1。20.对如图所示二叉树进行前序遍历的结果为 (分数:2.00)A.B.C. D.解析:解析 根据对二叉树根的访问先后顺序不同,分别称为前序
22、遍历、中序遍历和后序遍历。这 3 种遍历都是递归定义的,即在其子树中也按照同样的规律进行遍历。下面就是前序遍历方法的递归定义。当二叉树的根不为空时,依次执行如下 3 个操作:访问根结点,按前序遍历左子树,按前序遍历右子树。根据如上前序遍历规则来遍历本题中的二叉树。首先访问根结点,即 A,然后遍历 A 的左子树。遍历左子树同样按照相同的规则首先访问根结点 B,然后遍历 B 的左子树。遍历 B 的左子树,首先访问 D,然后访问 D 的左子树,D 的左子树为空,接下来访问 D 的右子树,即 Y。遍历完 B 的左子树后,再遍历 B 的右子树,即 E。到此遍历完 A 的左子树,接下来遍历 A 的右子树。
23、按照同样的规则,首先访问 C,然后遍历 C 的左子树,即 F。C 的左子树遍历完,接着遍历 C 的右子树。首先访问右子树的根结点 X,然后访问X 的左子树,即 Z,接下来访问 X 的右子树,右子树为空,遍历的结果为 ABDYECFXZ,故本题的正确答案为选项 C。21.在结构化程序设计中,模块划分的原则是(分数:2.00)A.各模块应包括尽量多的功能B.各模块的规模应尽量大C.各模块之间的联系应尽量紧密D.模块内具有高内聚度,模块间具有低耦合度 解析:解析 本题考查软件工程中软件设计的概念和原理。人们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得到如下的启发式规则:改进软件结构,
24、提高模块独立性。通过模块的分解或合并,力求降低耦合、提高内聚。低耦合是指降低不同模块间相互依赖的紧密程度,高内聚是指提高一个模块内各元素彼此结合的紧密程度。模块的规模应适中。一个模块的规模不应过大,过大的模块往往是由于分解不够充分;过小的模块开销大于有益操作,而且模块过多将使系统接口复杂,因此过小的模块有时不值得单独存在。模块的功能应该可以预测,但也要防止模块功能过分局限。如果模块包含的功能太多,则不能体现模块化设计的特点;如果模块的功能过分局限,使用范围就过分狭窄。本题的正确答案是选项 D。22.下列叙述中正确的是(分数:2.00)A.算法的效率只与问题的规模有关,而与数据的存储结构无关B.
25、算法的时间复杂度是指执行算法所需要的计算工作量 C.数据的逻辑结构与存储结构是一一对应的D.算法的时间复杂度与空间复杂度一定相关解析:解析 本题考查数据结构中有关算法的基本知识和概念。数据的结构会直接影响算法的选择和效率。而数据结构包括两方面,即数据的逻辑结构和数据的存储结构。因此,数据的逻辑结构和存储结构都影响算法的效率。选项 A 的说法是错误的。算法的时间复杂度是对算法在计算机内执行时所需时间的度量;与时间复杂度类似,空间复杂度是对算法在计算机内执行时所需存储空间的度量。23.下列关于运算符重载的描述中,正确的是(分数:2.00)A.运算符重载可以改变操作数的个数B.运算符重载可以改变运算
26、符的优先级C.运算符重载可以改变运算符的结合性D.运算符重载可以使运算符实现特殊功能 解析:解析 重载后的运算符的优先级和结合性都不会改变,运算符重载进行对原有的运算符进行适当的改造,重载的功能与原有的功能相类似,但是不能改变原运算符的操作对象个数。24.下列叙述中正确的是(分数:2.00)A.软件测试的主要目的是发现程序中的错误 B.软件测试的主要目的是确定程序中错误的位置C.为了提高软件测试的效率,最好由程序编制者自己来完成软件测试的工作D.软件测试是证明软件没有错误解析:解析 就软件测试而言,它的目的是发现软件中的错误。但是,发现错误并不是最终目的,最终目的是通过测试发现错误之后还必须诊
27、断并改正错误,这才是测试的目的。由于测试的目标是暴露程序中的错误,所以从心理学角度看,由程序的编写者自己进行测试是不恰当的。因此,在软件测试阶段通常由其他人员组成测试小组来完成测试工作。经过上述分析可知,选项 A 的说法是正确的,而选项 B、C、D 的说法是错误的。25.在语句 cindata;中,cin 是(分数:2.00)A.C+的关键字B.类名C.对象名 D.函数名解析:解析 cin 是 istream 输入流类的派生类 istream_withassign 对象。cout 是 ostream 输出流类的派生类 ostream_withassign 对象。26.若语句: coutsetf
28、ill()setw(5)3141512setw(5)“OK!“; 是程序中第一个输出语句,则输出结果是(分数:2.00)A.31415120K! B.3141512 OK!C.314150K!D.31415OK 1解析:解析 setfill()对当前输出整行有效,setw(5)设置紧跟其后的输出宽度为 5,当输出宽度不超过 5 时用“”来填充;如果宽度超过 5 则不填充,原样输出所有数据;在没有设置左右对齐时,默认为右对齐,用填充字符填充左边。27.下列运算符中,不能被重载的是(分数:2.00)A.&B.!=C. D.+解析:解析 C+规定,以下运算符不能被重载:“”,“*”,“:”,“?:”
29、,“:sizeof”。28.下列叙述中错误的是(分数:2.00)A.在数据库系统中,数据的物理结构必须与逻辑结构一致 B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统的基础上建立数据库D.数据库系统需要操作系统的支持解析:解析 本题考查数据库系统的基本概念和知识。数据的逻辑结构是数据间关系的描述,它只抽象地反映数据元素之间的逻辑关系,而不管其在计算机中的存储方式。数据的存储结构又叫物理结构,是逻辑结构在计算机存储器里的实现。这两者之间没有必然的联系。因此,选项 A 的说法是错误的。数据库可以看成是长期存储在计算机内的、大量的、有结构的和可共享的数据集合。因此
30、,数据库具有为各种用户所共享的特点。不同的用户可以使用同一个数据库,可以取出它们所需要的子集,而且容许子集任意重叠。数据库的根本目标是要解决数据的共享问题。因此,选项 B 的说法是正确的。数据库设计是在数据库管理系统的支持下,按照应用的要求,设计一个结构合理、使用方便、效率较高的数据库及其应用系统。数据库设计包含两方面的内容:一是结构设计,也就是设计数据库框架或数据库结构;二是行为设计,即设计基于数据库的各类应用程序、事务等。因此,选项 C 的说法是正确的。数据库系统除了数据库管理软件之外,还必须有其他相关软件的支持。这些软件包括操作系统、编译系统、应用软件开发工具等。对于大型的多用户数据库系
31、统和网络数据库系统,还需要多用户系统软件和网络系统软件的支持。因此,选项 D 的说法是正确的。因此,本题的正确答案是选项 A。29.下列有关继承和派生的叙述中,正确的是(分数:2.00)A.派生类不能访问基类的保护成员B.作为虚基类的类不能被实例化C.派生类应当向基类的构造函数传递参数 D.虚函数必须在派生类中重新实现解析:解析 派生类在公有派生和保护派生两种方式下,可以访问基类的保护成员。虚基类也可 以被实例化,虚函数如果在派生类中不被重新定义,则直接被派生类继承。30.有如下程序: #includeiostream using namespace std; class A public:
32、static int a; void init( )a=l; A(int a=2)init( );a+; ; int A:a=0; A obj; int main( ) coutobj.a; return 0; 程序的输出结果是(分数:2.00)A.0B.1 C.2D.3解析:解析 构造函数 A 中的形参 a 对静态成员 a 形成了屏蔽,故只有在成员函数 init( )中才将静态成员 a 的值修改为 1,而在其他成员函数中没发生变换,故 obj.a=1。31.下面程序对一维坐标点类 Point 进行了运算符重载: #include iostream using namespace std; c
33、lass Point public: Point(int val)x=val; Point& operator+( )x+;return*this; Point operator+(int)Point old=*this;+(*this);return old; int GetX( )eonst t return x; private: int x; ; int main( ) Point a(10); cout(+(分数:2.00)_解析:解析 Point& operator+( )x+;return*this;是在成员函数运算符重载单目运算符(前缀方式),Point operator+(i
34、nt)Point old=*this;+(*t11is);return old;32.下列选项中,不属于面向对象程序设计特征的是(分数:2.00)A.继承性B.多态性C.类比性 D.封装性解析:解析 面向对象方法具有封装性、继承性、多态性几大特点。就是这几大特点,为软件开发提供了一种新的方法学。封装性:所谓封装就是将相关的信息、操作与处理融合在一个内含的部件中(对象中)。它是面向对象程序设计的基础。继承性:子类具有派生它的类的全部属性(数据)和方法,而根据某一类建立的对象也具有该类的全部属性(数据)和方法,这就是继承性。继承有利于提高软件开发效率,容易达到一致性。多态性:多态性就是多种形式。不
35、同的对象在接收到相同的消息时,采用不同的动作。33.有如下程序: #include iostream using namespace std; int main( ) char str100,*P; cout“please input a string:“; cinstr; P=str; for(inti=0;*P!=/0;p+,i+); coutiendl; return 0; 运行这个程序时,若输入字符串为 Abcdefg abcd 则输出结果是(分数:2.00)A.7 B.12C.13D.100解析:解析 本段程序实现从键盘接收一段字符串,并计算字符串的长度,cin 输入流对象会将空白符
36、、回车符、tab 键作为终止标志,所以输入 Ahcdefg abcd 得到的字符串长度为 7。34.有如下程序: #include iostream using namespace std; class Sample friend long fun(Sample s); public: Sample(long(分数:2.00)A.x=a; private: long x; ; long fun(Sample s) if(sx2)return 1; return sx*fun(Sample(sx-1); int main( ) int sunl=0; for(inti=0;i6;i+)sum+=
37、fun(Sample(i); toutsum: return 0; 程序的输出结果是 A) 120B.16C.154 D.34解析:解析 通过调用友元函数,实现求解 n!的算法。sum=5!+4!+3!+2!。35.有如下函数定义: void func(int a,int B) a+;b+; 若执行代码段: intx=0,y=1; func(x,y); 则变量 x 和 y 值分别是(分数:2.00)A.0 和 1B.1 和 1C.0 和 2 D.1 和 2解析:解析 fun( )的第一个参数是传值调用,第二个是传址调用,故在函数中修改形参的值会被传回到实参中,故结果为 0 和 2。二、填空题(
38、总题数:12,分数:30.00)36.某二叉树中度为 2 的结点有 18 个,则该二又树中有 1 个叶子结点。(分数:2.00)填空项 1:_ (正确答案:19)解析:解析 根据公式进行推导,假设 n0,是度为 0 的结点总数(即叶子结点数),n 1是度为 1 的结点总数,n 2是度为 2 的结点总数,由二又树的性质可知:n 0=n2+1,则 n=n0+n1+n2(其中 n 为完全二叉树的结点总数),由上述公式把 n2消去得 n=2n0+n1-1,由于完全二叉树中度为 1 的结点数只有 0 或 1 两种可能,由此得到 n0=(n+1)/2 或 n0=n/2,合并成一个公式 n0=(n+1)/2
39、。37.在面向对象方法中,类的实例称为 1。(分数:2.00)填空项 1:_ (正确答案:对象)解析:解析 在面向对象概念中,所有的同类的实体的抽象就构成一个类,而类被实例化就形成一个对象。38.诊断和改正程序中错误的工作通常称为 1。(分数:2.00)填空项 1:_ (正确答案:程序调试)解析:解析 程序调试定义见题目。39.在关系数据库中,把数据表示成二维表,每一个二维表称为 1。(分数:2.00)填空项 1:_ (正确答案:关系)解析:解析 在关系数据库模型中,一张二维表就是一个关系。40.问题处理方案的正确而完整的描述称为 1。(分数:2.00)填空项 1:_ (正确答案:算法)解析:
40、解析 本描述是算法的概念。在下面函数的画线处填上适当的内容,使该函数能够利用递归方法求解字符串 str 的长度(不得使用系统提供的字符串处理函数)。 int GetLen(char*str) if( (6) )return (7) ; else return 1+GetLen(str+1); (分数:4.00)填空项 1:_ (正确答案:*str=/0)解析:解析 递归函数的结束条件是读到字符串的结束符/0。填空项 1:_ (正确答案:0)解析:解析 当为/0时,不需要把此字符计入到字符长度中去,所以计为 0。41.下列程序的输出结果是_。 #include iostream #include
41、 cstring using namespace std; void fun(const char*S,char C) e=sstrlen(s)/2; int main( ) char str =“ABCDE“; char ch=str1; fun(str,ch); coutch; return 0; (分数:2.00)填空项 1:_ (正确答案:答案 C)解析:解析 void fun(const char * s,charC) 中 char&c 是引用作为参数,改变 c 的值将会改变调用函数里面的实参 ch 的值,在函数里面 c=sstrlen(s)/2;的值为 s5/2;所以 c=c,并将
42、结果回传给 ch,故 coutch 的结果为C。在下面程序的画线处填上适当的内容,使程序执行后的输出结果为 1/2005。 #include iostream using namespace std; class Date public: Date(int m=1,int y=0):month(m),year(y) void Print( )coutmonth“/“yearendl; (9) operator+(const Date&dl,const Date& d2); private: int month,year; ; (10) operator+(const Date& dl,cons
43、t Date& d2) int year,month; year=d1year+d2year; month=d1month+d2month; year+=(month-1)/12; month=(month-1)%12+1; return Date(month,year); void main( ) Date dl(3,2004),d2,d3(10); d2=d3+dl; d2Print( ); (分数:4.00)填空项 1:_ (正确答案:friend:Date)解析:解析 完善友元函数重载声明格式,见下一题解析。_解析:解析 因为重载函数后面有两个形参,“+”运算符是二元运算符,故将“+”
44、运算符重载为友元函数,重载为友元函数的一般格式为: niend 函数类型 operator 运算符(形参表)函数体在下面程序的画线处填上适当的内容,使程序执行后的输出结果为 ABCD。 #include iostream using namespace std; class A public:A( )coutA; ; class B: (11) public:B( )coutB; ; class C: (12) public:C( )coutC; ; class D:public B,public C public:D( )coutD; ; void main( ) D( ); coutend
45、l; (分数:4.00)填空项 1:_ (正确答案:public A)解析:解析 考查在继承中构造函数的调用顺序,创建派生类对象时依次调用基类的构造函数,最后调用派生类的构造函数。填空项 1:_ (正确答案:空格)解析:解析 考查在继承中构造函数的调用顺序,创建派生类对象时依次调用基类的构造函数,最后调用派生类的构造函数。42.补充完整下面的类定义: const double PI=3.14; class Circle /圆形物体的抽象基类 protected: double r; /半径 public: Circle(double radius=0):r(radius) (13) ; /计算圆形物体表面积的纯虚函数声明 ; class Cylinder:public Circle /圆柱体类 double h; /高度 public: Cylinder(double radius=0,double height=0); Circle(radius),h(height) Virtual double Area( )ret