C++复习电子版(带答案)
一、选择题(20分)
1.面向对象的程序设计语言必须具备的关键要素是(D)
A.抽象和封装 B.抽象和多态性
C.抽象,封装和继承性 D.抽象,封装,继承和多态性
2.下列说法中正确的是( A )
A.类中的函数成员可以在类体中定义,也可以在类体之外定义
B.类定义中只能声明函数成员的函数头,不能定义函数体
C.类中的函数成员在类体之外定义时必须要与类的定义放在同一文件中
D.在类体之外定义的函数成员不能操作该类的私有数据成员
3.在下列成对的表达式中,运算符“+”的意义不相同的一对是( C )
A. 5.0+2.0和5.0+2 B. 5.0+2.0和5+2.0
C. 5.0+2.0和5+2 D. 5+2.0 和 5.0+2
4.类的成员的初始化是通过函数完成的,这个函数通常是( B )
A.析构函数 B.构造函数
C.其他成员函数 D.友元函数
5.下列关键字中,用以说明类中公有成员的是( D )
A. friend B. private
C. protected D. public
6.静态成员函数没有(B)
A .返回值 B .this指针
C.指针参数 D.返回类型
7.当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中(A.都是虚函数
B.只有被重新说明时才是虚函数
C. 只有被重新说明为virtual时才是虚函数
A )
D.都不是虚函数
8.假定AB为一个类,则执行“ AB x:”语句时将自动调用该类的( D )
A.有参构造函数 B.析构函数
C.拷贝构造函数 D.无参构造函数
9.在c ++中实现封装是借助于( B )
A.枚举 B.类
C.数组 D.函数
10.所有在函数中定义的变量,都是( B )
A.全局变量 B.局部变量
C. 静态变量 D.寄存器变量
二、填空题(20分)
11.静态成员函数,友元函数,构造函数和析构函数中,不属于类的成员函数的是_友元函数___。
12.C++中,类的继承方式有___公有继承_____ , ___保护继承______和私有继承三种
方式。
13.语句序列 ifstream datafile;
datafile.open( “data.dat” );
的功能可用一个语句实现,这个语句是__ifstream datafile( “data.dat” );___。
14.一般将运算符重载为类的友元函数或者类的___成员函数______。
15.当一个类中含有___纯虚__函数时,这个类便成为抽象类。
16.在C++中,虚函数实现了类族的___多 态__性。
17.通过C++语言中类的 继承机制 , 可以扩充和完善已有类派生出新类,以适应新的需求。
18.为了在对象生存期结束时清理释放其指针成员所指向的动态存储空间,通常需要为该类定义___析构函数____。
19.在函数头与函数体之间加_____const_______关键字可以防止该函数改变数据成员的值。
20. A是一个类,已有语句“A*p; p=new A [10] ;”。要释放由p指向的动态空间,正确的语句应该是___delete [] p;____。
三、改错题(5题,10分)
21.下面的类定义有一处错误,请用下横线标出错误所在行并改正错误。
22.class A{
23. int a;
24.public:
25. A(int aa):a=aa{ } A(int aa){a=aa;}
26.};
答案:A(int aa):a=aa{}错误,改为A(int aa):a(aa){}
27.下面的程序先把字符串“Look out!”输出到一个文件中,然后再从该文件输入,并显示在屏幕上,显示效果为Look out!。程序中有一处错误,请用下横线标出错误所在行,并给出更改意见。
28.# include 29.void main(){ 30. ofstream outf(“D:\em.dat”,ios::trunc); 31. outf<<“Look out!”; 32. outf.close( ); 33. ifsteam inf(“D:\em.dat”); 34.char k[20]; 改:inf.getline(k,20); //inf>>k inf>>k; count< 36.} 答案:inf>>k;错误,它只能读出Look,应改为,inf.getline(k,20); 23.下面的程序有一处错误,请用下横线标出错误所在行并改正错误。 # include class Test{ public; static int x; }; int x=20;//对类成员初始化 void main ( ) { cout< 答案:int x=20;错误,应改为int Test::x=20; 24.下面的程序类B的定义中有一处错误,请用下横线标出错误所在行并说明错误原因。 #include #include class A{ public:A(const char *nm){strcpy(name,nm);} private:char name[80]; }; class B:public A{ public:B(const char *nm):A(nm){ } void PrintName( )const; }; void B::PrintName( )const{ cout<<“name:”< void main( ){ B b1(“wang li”); b1.PrintName( ); } 答案:cout<<“name:”< # include class Location{ private: int X,Y; public; void init(int initX,int initY); int sumXY( ); }; void Location::init(int initX,int initY) { X=initX; Y=initY; } int Location::sumXY( ) { return X+Y; } void main( ) { Location A1; int x,y; A1.init(5,3); x=A1.X;y=A1.Y;(私有成员不能直接访问!) cout< } } 四、完成程序题(5题,20分) 26.完成下面类中的成员函数的定义。 class test { private: int num; float x; public: test(int,float f); test(test &); }; test::test(int n,float f) { num=n; ① ①____x=f_______________; } test::test(test & t) { ② ___num=t.num_______________; X=t.X ; } 27. 在下面的横线处填上适当的内容,是程序完整。 # include # include Class loc{ Private: Float x,y; Public: loc( ① float x1,float y1 ) { x=x1; y=y1; } float getx( ) {return x;} float gety( ) {return y;} ② static float dis (loc&,loc&); }; float loc::dis (loc&a, loc&b) { flost dx = a.x-b.x; flost dy = a.y-b.y; return sqrt (dx*dx+dy*dy); } void main( ) { loc pl(3.5 , 4.5),p2(5.5 , 6.5); float d = loc::dis (p1,p2); cout <<“The distance is”<< d; } 28.在下面程序中的横线处填上适当内容,使程序完整。 # include class vehicle { protected: int size; int speed; public; void setSpeed(int s){speed=s;} ①____virtual____int____ getSpeedLevel( ){return speed/10;} }; class car:public vehicle { public: int getSpeedLeve( ){return speed/5;}//求派生类小汽车速度级 }; class truck:public vehicle { public: int getspeedLevel( ){return speed/15;}//求派生类大卡车类速度级 }; int maxSpeedLevel(vehicle ② &v2 ,vehicle ③ &v1 具类族中速度级 )//比较交通工 { if(v1.getSpeedLevel( )>v2.getSpeedLevel( )) return 1; else reutrn 2; } void main() { turck t; car c; t.setSpeed(130); c.setSpeed(60);
Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务