《C++语言程序设计复习题.doc》由会员分享,可在线阅读,更多相关《C++语言程序设计复习题.doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C+程序设计复习题一、 选择题1 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是( ) A、类 B、对象 C、函数体 D、数据块2面向对象的程序设计语言必须具备的关键要素是( ) A、抽象和封装 B、抽象和多态性 C、抽象、封装、继承和多态性 D、抽象、封装和继承性3类的构造函数被自动调用执行的情况是在定义该类的( ) A、成员函数时 B、数据成员时 C、对象时 D、友元函数时4设有函数模板 template Q Sum(Qx,Qy) return(x)+(y); 则下列语句中对该函数模板错误的使用是( ) A、Sum(10,2); B、Sum(5.0,6
2、.7); C、Sum(15.2f,16.0f); D、Sum(AB,CD);5已知类A是类B的友元,类B是类C的友元,则( ) A、类A一定是类C的友元 B、类C一定是类A的友元 C、类C的成员函数可以访问类B的对象的任何成员 D、类A的成员函数可以访问类B的对象的任何成员6静态成员函数没有( ) A、返回值 B、this指针 C、指针参数 D、返回类型7当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中( ) A、都是虚函数 B、只有被重新说明时才是虚函数 C、只有被重新说明为virtual时才是虚函数 D、都不是虚函数8下面叙述不正确的是( ) A、派生类一般都用公有派
3、生 B、对基类成员的访问必须是无二义性的 C、赋值兼容规则也适用于多重继承的组合 D、基类的公有成员在派生类中仍然是公有的9在C+中实现封装是借助于( ) A、枚举 B、类 C、数组 D、函数10所有在函数中定义的变量,都是( ) A、全局变量 B、局部变量 C、静态变量 D、寄存器变量11下列特性中,C与C+共有的是( ) A、继承 B、封装 C、多态性 D、函数定义不能嵌套12通常情况下,函数模板中的类型参数个数不能是( ) A、0 B、2 C、4 D、313在下列成对的表达式中,运算符“+”的意义不相同的一对是( ) A、5.0+2.0和5.0+2 B、5.0+2.0和5+2.0 C、5
4、.0+2.0和5+2 D、5+2.0和5.0+214类的指针成员的初始化是通过函数完成的,这个函数通常是( ) A、析构函数 B、构造函数 C、其它成员函数 D、友元函数15要禁止修改指针p本身,又要禁止修改p所指向的数据,这样的指针应定义为( ) A、const char *p=“ABCD”; B、char const *p=“ABCD”; C、char *const p=“ABCD”; D、const char * const p=“ABCD”;16如果表达式+i*k中的“+”和“*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为( ) A、operator*(i.op
5、erator+(),k) B、operator*(operator+(i),k) C、i.operator+().operator*(k) D、k.operator*(operator+(i)17下列说法中正确的是( ) A、类定义中只能说明函数成员的函数头,不能定义函数体 B、类中的函数成员可以在类体中定义,也可以在类体之外定义C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中 D、在类体之外定义的函数成员不能操作该类的私有数据成员18若派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的( ) A、私有成员 B、公有成员 C、保护成员 D、保护成员或私有成员
6、19对基类和派生类的关系描述中,错误的是( ) A、派生类是基类的具体化 B、基类继承了派生类的属性 C、派生类是基类定义的延续 D、派生类是基类的特殊化20类B是类A的公有派生类,类A和类B中都定义了虚函数func(),p是一个指向类A对象的指针,则p-A:func()将( ) A、调用类A中的函数func() B、调用类B中的函数func() C、根据p所指的对象类型而确定调用类A中或类B中的函数func() D、既调用类A中函数,也调用类B中的函数答案:1B 2C 3C 4D 5D 6B 7A 8D 9B 10B11D 12A 13C 14B 15D 16B 17B 18A 19B 20
7、A二、 填空题1假定用户没有给一个名为AB的类定义析构函数,则系统自动给出的缺省析构函数定义为_。2模板定义中标识类型的参数必须用关键字_修饰。3表达式counthex还可表示为_。4通过C+语言中的_机制,可以从现存类中构建其子类。5要在调用虚函数的时候强制进行静态联编,可以通过在调用中对虚函数加_实现。6封装要求一个对象应具备明确的功能,并具有_以便和其它对象相互作用。7在删除一个动态对象时,将自动调用该动态对象所属类的_函数。8静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是_。9在下面的类定义中,私有成员有_。 class Location int X,Y; prote
8、cted: int zeroX,zerxY; int SetZero(intzeroX, intzeroY); private: int length,height; public: void init(int initX,int initY); int GetX(); int GetY(); ;10类的私有成员只能被它的成员函数和_访问。11在用C进行程序设计时,最好用_代替malloc。12函数模板中紧随template之后尖括号内的类型参数都要冠以保留字_。13在ios类中定义的用于控制输入输出格式的枚举常量中,用于代表十进制、八进制和十六进制的3个枚举常量是dec、oct和_。14如果
9、重载了运算符,则相应的运算符函数名是_。15由static修饰的数据成员为该类的所有对象_。16设函数max是由函数模板实现的,并且max(3.5,5)和max(10,5)都是正确的函数调用,则该模板具有_个类型参数。17在单继承和多继承方式中,面向对象的程序设计应尽量使用_继承。18语句序列 ifstream datafile; datafile.open(“data.dat”); 的功能可用一个语句实现,这个语句是_。19将关键字const写在函数头之后,函数体之前,说明该函数是一个const成员函数。此时const不是指定函数的返回值,而是修饰_指针。20一个抽象类的派生类可以实例化的必
10、要条件是实现了所有的_。21在C+中,虚函数帮助实现了类的_性。22通过C+语言中类的_,可以扩充和完善已有类以适应新的需求。23为了在对象生存期结束时释放其指针成员所指向的动态存储空间,通常需要为该类定义_。24在联合中,所有数据成员具有_的地址,任一时刻只有_个数据成员有效。25.在已经定义了整型指针ip后,为了得到一个包括10个整数的数组并由ip所指向,应使用语句_。26为了实现多态性,派生类需重新定义基类中的_。27编译时的多态性通过_函数实现。28在派生类中实现基类成员的初始化,需要由派生类的构造函数调用_来完成。29在C中,访问指针所指向的对象的成员使用运算符_。30重载函数在参数
11、类型或参数个数上不同,但_相同。答案:1 AB();2 class(或typcname)3cout,sctf(ios:hex,ios:basefield)(或coutsetf(ios:hex),或cout;30函数名三、 改错题1指出下面程序中的错误,并说明出错原因。 #include class ConstFun public: void ConstFun() const int f5()constreturn 5; int Obj() return 45; int val; int f8(); ; int ConstFun:f8()return val; void main() const
12、 ConstFun s; int i=s.f5();coutValue=iendl; 2指出下面程序中的错误,并说明错误原因。 #include class A public:void fun()couta.funendl; ; class B public:void fun()coutb.funendl; void gun()coutb.gunendl; ; class C:public A,public B private:int b; public:void gun()cout c.gunendl; ; void main() c obj; obj.fun(); obj.gun(); 3
13、指出下面程序段中的错误,并说明出错原因。 class Location int X,Y; protected: int zeroX,zeroY; int SetZero(int zeroX,int zeroY)X=zeroX;Y=zeroY; private: int length,height; public: float radius; void init(int initX,int initY)length=initX;height=initY; int GetX()return X; int GetY()return Y; ; int main() Location retangleA
14、=25,20,3,5,6,7,3; return 0; 4下面的程序先把字符串“Look out!”输出到一个文件中,然后再从该文件输入,并显示在屏幕上,显示效果为Look out!。程序中有一处错误,请用下横线标出错误所在行,并给出更改意见。 # include void main() ofstream outf(“D:tem.dat”,ios:trunc); outfk; countk; inf.close( ); 5下面的程序有一处错误,请用下横线标出错误所在行并改正错误。 # include class Test public; static int x; ; int x=20;/对类
15、成员初始化 void main ( ) coutTest:x; 6下面的程序类B的定义中有一处错误,请用下横线标出错误所在行并说明错误原因。# include # include class A public:A(const char *nm)strcpy(name,nm); private:char name80; ; class B:public A public:B(const char *nm):A(nm) void PrintName( )const; ; void B:PrintName( )const cout“name:”nameendl; void main( ) B b1(
16、“wang li”); b1.PrintName( ); 答案:1程序中第4行“void ConstFun()”错误,因为声明构造函数时不能指定返回类型。2第15行 obj.fun();语句错误,因为用C类的对象obj对函数fun()的访问是两义的,应使用成员名限定来消除两义性。3location retangleA25,20,3,5,6,7,3;语句错误,因为数据成员不都是公有成员,不能用初始化列表初始化。4第7行错,应改为:char k;while(inf.get(k) coutk;注:还可改为char k;while(k=inf.get()!=EOF) coutk;char k20;in
17、f.get(k,20); coutk;或char k20;inf.getline(k,20); coutk;或其中的变量k也可以是其他变量名。5程序中第6行错误,该行应为: int Test:x=20;6第12行有错,因为在类B中,name是由类A私有成员继承来的,不能被派生类访问。四、 四、完成程序题根据题目要求填空,完成程序。1在下面程序段横线处填上适当的内容。 class A _ int n; public: A(int nn=0):n(nn) if(n=0)a=0; else a=new intn; _/定义析构函数,释放动态数组空间 ;2在下面程序横线处填上适当内容,使程序执行结果为
18、: 200_ _ 100 程序如下: #include template _ Tf(Tx,Ty) if(sizeof(T)=_) return x+y; else return x*y; void main() cout f(10,20)-f(45.5,54.5)endl; 3下面程序三次调用同一函数sum,在横线处填上适当内容,使输出结果为: S=2 S=5 S=9 程序如下: #include void sum(int i) static int s; _; coutS=sendl; void main (void) int i; for (i=0;_) sum(i); 4请在下面横线处填
19、上适当的内容,使程序的输出为: 7.00000 7程序如下: #include viod main() double x=7; cout_x; coutendl_x; 5在下面程序横线处填上适当的内容,使该程序输出结果为: Creating B end of B end of A 程序如下: #include class A public: A() _coutend of Aendl; ; calss B:public A public: B()_ B()coutend of Bendl; ; void main() A*pa=new B; delete pa 6在下面程序横线处填上适当内容,
20、以使该程序执行结果为: 12 88 # include template class Tany public: ; void pr() if(sizeof(int)= ) county? x:y)endl; else couty? y:x)endl; ; void main( ) Tanydobj=12.0,88.0; dobj.pr( ); Tany iobj=12,88; iobj.pr( ); 7在下面的横线处填上适当内容,使程序完整。 # include # include class loc private: float x,y; public; loc( ) x=x1; y=y1;
21、 float getx( )return x; float gety( )return y; 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; 8在下面程序中的横线处填上适当内容,使程序完整。 # include class vehicle p
22、rotected: int size; int speed; public; void setSpeed(int s)speed=s; 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 ,vehicle ) if(v1.getSpeedLeve
23、l( )v2.getSpeedLevel( ) return 1; else reutrn 2; void main() turck t; car c; t.setSpeed(130); c.setSpeed(60); coutmaxSpeedLevel(t,c)endl;/此结果输出为2 9在下面横线处填上合适内容,完成类B的定义。 # include class A public:A( )a=0; A(int i)a=i; void print( )couta”,”; private:int a; ; class B:public A public:B( )b1=b2=0 B( )b1=i
24、;b2=0; B(int i,int j,int k): b1=j;b2=k;/使a的值为i void print( )A:print( );coutb1”,”b2endl; private:int b1,b2; 10根据注释在空白处填写适当内容。 class Location private: int X,Y; public: void init(int initX,int initY); int GetX( ); int GetY( );void Location:init(int initX,int initY) X=initX; Y=initY; int Location:GetX(
25、) reutrn X; int Location:GetY( ) reutrn Y; # includevoid main( ) Location A1;A1.init(20,90); /定义一个指向A1的引用rA1 /用rA1在屏幕上输出对象A1的数据成员X和Y的值 答案:1int *a;A()deletea; 2class T sizeof(double)(或8或其他等价形式)3s2i(或其他等价形式)i3;i+(或其他等形式) 4setiosflage (ios:showpoint)resetiosflags(ios:showpoint) 说明:其中ios: 可写成ios_basc:5v
26、irtual A()cout”creating B”end; 6T x,y;sizeof x(或sizeof(x)或sizeof y 或 sizeof(y) 或 sizeof(T)7float x1,float y1;static 8virtual int &v1 &v2 9int i A(i) 10Location &rA1 =A1;coutrA1.GetX()rA1.GetY();五、 程序分析题1写出下面程序输出结果。 # include class A public: virtual void func()coutfunc in class A endl; ;class B publi
27、c: virtual void func()coutfunc in class B endl; ; class C:public A, public B public: void func()coutfunc in class Cendl; ; void main() C c; A& pa=c; B& pb=c; C& pc=c; pa.func(); pb.func(); pv.func(); 输出为:答案:func in class Cfunc in class Cfund in class C2写出下面程序的输出结果。 # include class Location public: i
28、nt X,Y; void init(int initX,int initY); int GetX(); int GetY(); ; void Location:init (int initX,int initY) X=initX; Y=initY; int Location:GetX() return X; int Location:GetY() return Y; void display(Location& rL) coutrL. GetX()rL.GetY()init(7,8); for (int i=0;i5;i+) display(*(rA+); 输出为:答案:7 81 12 25
29、34 43写出下面程序的输出结果: # include class A public: A( )a=0; A(int i)a=i; void Print( )couta”,”; int Geta( )return a; private:int a; ; class B:public A public:B( )b=0; B(int i,int j,int k); void Print( ); private:int b; A aa; ; B:B(int i,int j,int k):A(i),aa(j)b=k;void B:Print( ) A:Print( ); coutb”,”aa.Geta( )endl; void main( ) B bb2; bb0=B(1,2,5); bb1=B(3,4,7); for(int i=0;i2;i+) bbi.Print( ); 输出为:答案:1,5,23,7,44写出下面程序的输出结果: # include class Location int X,Y