1、A 、;B 、/C 、()D 、3 、设int a=3,b=4,c=5; 表达式(a+b )c&b=c 的值是(C )。A 、2B 、-1C 、0D 、14 、下列标识符中,不合法的用户标识符为(A )A 、a#bB 、_intC 、a_10D 、PAd5 、while(!x) 中的(!x) 与下面条件(D )等价。A 、x=1B 、x!=1C 、x!=0D 、x=06 、定义析构函数时,应该注意(C )A 、其名与类名完全相同B 、返回类型是void 类型C 、无形参,也不可重载D 、函数体中必须有delete 语句7 、每个类(C )构造函数。A 、只能有一个B 、只可有公有的C 、可以有
2、多个D 、只可有缺省的8 、在一个类中可以对一个操作符进行(D )重载。A 、1 种B 、2 种以下C 、3 种以下D 、多种9 、重载赋值操作符时,应声明为(A )函数。A 、友元B 、虚C 、成员D 、多态10 、在公有继承的情况下,基类成员在派生类中的访问权限(B )A 、受限制B 、保持不变C 、受保护D 、不受保护11 、通过(A )调用虚函数时,采用动态束定。A 、对象指针B 、对象名C 、成员名限定D 、派生类名三、双项选择题(在每小题的五个备选答案中,选出二个正确的答案,并将其序号填在题中的括号内,每小题 2 分,共18 分)1 、在(C )(E )情况下适宜采用inline
3、定义内联函数。A 、函数体含有循环语句B 、函数体含有递归语句C 、函数代码少、频繁调用D 、函数代码多、不常调用E 、需要加快程序执行速度2 、在类中说明的成员可以使用关键字(A )(D )进行修饰。A 、privateB 、externC 、autoD 、publicE 、register3 、如果类A 被说明成类B 的友元,则(D )(E )。A 、类A 的成员即类B 的成员B 、类B 的成员即类A 的成员C 、类A 的成员函数不得访问类B 的成员D 、类A 的成员函数可以访问类B 的成员E 、类B 不一定是类A 的友元4 、创建或删除堆对象,需要使用操作符(B )(C )A 、B 、n
4、ewC 、deleteD 、.E 、*5 、在类中声明转换函数时不能指定(A )(C )A 、参数B 、访问权限C 、返回类型D 、操作E 、标识符6 、在派生类中重新定义虚函数时必须在(A )(B )方面与基类保持一致。A 、参数个数B 、参数类型C 、参数名字D 、操作内容E 、赋值7 、字符串之间的比较按(C )(E )进行。A 、字符串的长度B 、字符的大小写种类C 、字符串的内部代码D 、字符串的含意E 、从头至尾的顺序8 、C+ 类体系中,不能被派生类继承的有(B )(E )。A 、转换函数B 、构造函数C 、虚函数D 、静态成员函数E 、赋值操作函数9 、下列虚基类的声明中正确的
5、是(B )(D )A 、class virtual B: public AB 、class B: virtual public AC 、class B: public A virtualD 、class B: public virtual AE 、virtual class B:四、简答题(每小题 5 分,共30 分)1 给出下面程序的运行结果。# include “iostream.h”int main( ) int i=1;while (i=15)if (+i%3!=2) continue;else cout ”i=”iendl;答:输出结果:i=2i=5i=8i=11i=142. 给出下
6、面程序的运行结果。#include “iostream.h”class testprivate:int numfloat fl;public:test( );int getint( )return num;float getfloat( )return fl;test( );test test( ) cout Initalizing default endl; num=0;fl=0.0;test test( )Desdtructor is activetest array2;cout array1.get int( ) array1.getfloat( ) 结果为:Initalizing de
7、fault0 0Desdtructor is active3. 给出下面程序的运行结果。#include iostream.h int num=50;int& ref=num;ref=ref+10num= num num=num+40;ref= ref return 0;num=60ref=1004 若程序员没有为类定义拷贝初始化构造函数,则编译器将自动生成一缺省的拷贝初始化构造函数,它可能会产生什么问题?若没有为类定义复制初始化构造函数,则编译器将会生成一个形如ClassName:ClassNa me(const ClassName &) 的缺省复制初始化构造函数,它的执行方式为用作为初始值
8、的对象的成员初始化正在建立的对象的相应成员。这在有的情况下会产生问题,如果类的成员是一个指针时,缺省复制初始化构造函数构造出的新对象中的指针将与原来的对象指向同一个变量。结果在对象消失时,要进行析构,这时这个变量将会被删除两次,所以就会出错了。5 C+ 没有提供字符串数据类型,如何简单地构造此种数据类型?可以定义一个字符数组作为字符串类型,如下:const int M=80;char strM;6 什么是多重继承中的支配原则?分析下面的类体系。class A int i;void f(float);class B: public Avoid f(int);则下面的访问是否具有二义性(b 为类B
9、 的一个对象)?b.i;b.f(3.5);类X 中的名字N 支配类Y 中同名的名字N ,是指类X 以类Y 为它的一个基类,这就称为多重继承的支配原则。在以上的访问中类B 中的名字支配类 A 中的名字i 和f ,所以在访问时不存在二义性。五、编程题(共30 分)1 、下面函数chnum 将一个整数字符串转换为一个整数。请在1 、2 、3 、4 处填入正确内容。(8 分)int chnum (char *str) int i, j, k, h, len, num=0;len=strlen(str);for(i=0; 1; i+) / 填入ik=k*10;j-;h=3-0; / 填入strinum=
10、num+h*4; / 填入kreturn num;1 填入i3 填入stri4 填入k2 、下列程序定义了一实部为real ,虚部为imag 的复数类complex ,并在类中将复数的加、减操作重载为友元函数。请在1 12 处填上适当内容。(9 分)class complex float 1, 2; / 填入real imag complex (float r=3, float i=4)/ 填入0 0 real=r; imag=i;5 operator+(complex,complex); / 填入friend complex6 operator-(complex,complex); / 填入
11、freind complex7 operator+(complex c1,complex c2) / 填入complex return complex(8, 9); / 填入c1.real+c2.real c1.imag+c2.imag10operator-(complex c1,complex c2) / 填入complex return complex(11, 12); / 填入c1.real-c2.real c1.imag-c2.imag1 real 2 imag3 0 4 05 freind complex 6 freind complex7 complex 8 c1.real+c2.
12、real9 c1.imag+c2.imag10complex11c1.real-c2.real 12 c1.imag-c2.imag3 、下列shape 类是一个表示形状的抽象类,area( ) 为求图形面积的函数,total( ) 则是一个通用的用以求不同形状的图形面积总和的函数。请从shape 类派生三角形类(triangle)、矩形类(rectangle )、并给出具体的求面积函数。class shapevirtual float area( )=0float total(shape *s ,int n)float sum=0.0;for(int i=0;n;i+)sum+=si-area( );return sum;解:这两个类如下:class triangle : public shapeprivate :float a, b ,c ,s;triangle( float s1=0, float s2=0 , float s3=0 ) a=s1;b=s2;c=s3;float area()s=(a+b+c)/2;return sqrt(s*(s-a)*(s-b)*(s-c);class rectangle :float w,h;rectangle( float width=0, float height=0) w=width;h=height;return w*h;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1