c++面向对象习题_第1页
c++面向对象习题_第2页
c++面向对象习题_第3页
c++面向对象习题_第4页
c++面向对象习题_第5页
免费预览已结束,剩余23页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、类和对象3、单项选择题1、对类的构造函数和析构函数描述正确的是()。A、构造函数可以重载,析构函数不能重载B、构造函数不能重载,析构函数可以重载C、构造函数可以重载,析构函数也可以重载D、构造函数不能重载,析构函数也不能重载 2、类的析构函数的作用是()。A、一般成员函数B、类的初始化C、对象的初始化D、删除对象3、假定 MyClass 为一个类,则该关的拷贝构造函数的声明语句为()。A 、 MyClass&(MyClass x);B 、 MyClass(MyClass x);C、 MyClass(MyClass &x);D、 MyClass(MyClass *x);4、假定

2、MyClass 为一个类, 则执行 MyClass a, b(2), *p; 语句时,自动调用构造函数 ()次。A、 2B、 3C、D、 55、下面对于友元函数描述正确的是(A、友元函数的实现必须在类的内部定义)。B、友元函数是类的成员函数C、友元函数破坏了类的封装性和隐藏性D、友元函数不能访问类的私有成员)。7、一个类的友元函数或友元类能够通过成员操作符访问该类的(A 、私有成员B、保护成员C、公用成员D、所有成员8、为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访)。问权限定义为(A、 publicB、 protected9、下面对静态数据成员的描述中,正确的是(C

3、、 privateD 、 static)。A、静态数据成员可以在类体内进行初始化B、静态数据成员不可以被类的对象调用C、 静态数据成员不能受private控制符的作用D、静态数据成员可以直接用类名调用10、下面对静态数据成员的描述中,正确的是()。A、静态数据成员是类的所有对象共享的数据B、类的每个对象都有自已的静态数据成员C、类的不同对象有不同的静态数据成员值D、静态数据成员不能通过类的对象调用11、假定 MyClass 为一个类,则执行 MyClass a3, *p2; 语句时,自动调用该类构造函 数( )次。A、2B、3C、4D、514、类 MyClass 的定义如下:class MyC

4、lasspublic:MyClass( ) value=0; SetVariable(int i) value=i;private:int value;则对下列语句序列正确的描述是()。MyClass *p, my;p=&my;A、 语句p=&my;是把对象my赋值给指针变量pB、语句MyClass *p, my;会调用两次类 MyClass的构造函数C、对语句*p.SetVariable(5)的调用是正确的D、语句 P->SetVariable(5)与语句 my.SetVariable(5)是等价的15、类 MyClass 的定义如下:class MyClasspubl

5、ic:MyClass( ) MyClass(int i) value=new int(0);int *value;)。若要对 Value 赋值,则下面语句正确的是(A 、 MyClass my; my.value=10;B、MyClass my; *my.value=10;C、 MyClass my; my.*value=1016、对于拷贝构造函数,正确的描述是(D 、MyClass my(10);)。A、在C+语言中如果不自定义类的拷贝构造函数,则每个类都有默认的拷贝构造函数B、必须为每个类定义拷贝构造函数C、如果要使用拷贝构造函数,则必须在类中先定义D、当定义了类的构造函数时,如果要使用拷

6、贝构造函数,则必须定义拷贝构造函数17、对于拷贝构造函数和赋值操作的关系,正确的描述是()。A、拷贝构造函数和赋值操作是完全一样的操作B、进行赋值操作时,会调用类的构造函数C、当调用拷贝构造函数时,类的对象正在被建立并被初始化D、拷贝构造函数和赋值操作不能在同一个类中被同时定义18、对下列语句正确的描述是()。const int *x;/int const *x;/A、语句的含义是指针变量x 不能更改B、语句的含义是指针变量x 所指向的值不能更改C、语句的含义是指针变量x 不能更改5D、语句和是相同含义的不同定义方式19、关于 new 运算符的错误的描述是()。A、使用运算符new创建对象数组

7、时必须定义初始值B、使用运算符new创建对象时,会调用类的构造函数C、运算符new可以用来动态创建对象和对象数组D、使用new运算符创建的对象可以使用运算符delete删除、分析下列各程序的运行结果1、源程序如下:#include<iostream.h>class MyClasschar ch;public:MyClass();MyClass(char character);void Print();MyClass();MyClass:MyClass()cout<<"This is a constructor!"<<endl; ch=&#

8、39;a'MyClass:MyClass(char character) cout<<"This is a constructor!"<<endl; ch=character;void MyClass:Print()cout<<"The value of ch is "<<ch<<endl; MyClass:MyClass()cout<<"This is a destructor!"<<endl;int main()MyClass first,

9、second('b');first.Print();second.Print();return 0;2、源程序如下:#include<iostream.h>class CStaticpublic:CStatic() val+; static int val;int CStatic:val=0;int main()cout<<"CStatic:val="<<CStatic:val<<endl;CStatic cs1; cout<<"cs1.val="<<cs1.val&

10、lt;<endl;CStatic cs2; cout<<"cs2.val="<<cs2.val<<endl;CStatic cs3,cs4;cout<<"cs1.val="<<cs1.val<<endl;cout<<"cs2.val="<<cs2.val<<endl;return 0;3(选作 )、源程序如下:#include<iostream.h>class ClassOnepublic:ClassOne()

11、;ClassOne(int value);void Print();ClassOne();private:int i;ClassOne:ClassOne()cout<<"This is constructor of ClassOne!"<<endl; i=0;ClassOne:ClassOne(int value)cout<<"This is constructor of ClassOne!"<<endl; i=value;void ClassOne:Print()cout<<"The

12、 i of ClassOne is "<<i<<endl; ClassOne:ClassOne()cout<<"This is destructor of ClassOne!"<<endl; 7class ClassTwopublic: ClassOne myclass; ClassTwo(); ClassTwo(int value); void Print(); ClassTwo();private: int i;ClassTwo:ClassTwo() cout<<"This is const

13、ructor of ClassTwo!"<<endl; i=0;ClassTwo:ClassTwo(int value) cout<<"This is constructor of ClassTwo!"<<endl; i=value;void ClassTwo:Print() cout<<"The i of ClassTwo is "<<i<<endl; ClassTwo:ClassTwo() cout<<"This is destructor of

14、ClassTwo!"<<endl;int main() ClassTwo myclass(10); myclass.Print(); return 0;4、源程序如下:#include<iostream.h> class MyClassint a,b;public:MyClass(int x=0,int y=0);MyClass();MyClass:MyClass(int x,int y):a(x),b(y)cout<<"This is a constructor!a+b="<<a+b<<endl; My

15、Class:MyClass()cout<<"This is a destructor!"<<endl;int main()MyClass x,y(10,20),z(y); return 0;5、源程序如下:#in clude<iostream.h>class MyClasspublic:MyClass(i nt val);MyClass();p rivate:int i;MyClass:MyClass(i nt val):i(val)cout<<"This is a con structor!i="<

16、<i<<e ndl; MyClass:MyClass()cout<<"This is a destructor!i="<<i<<e ndl; int mai n()MyClass *my3;int i;for(i=0;i<3;i+)myi=new MyClass(i);for(i=0;i<3;i+)delete myi;return 0;三、程序填空(请将最合适的语句填入各标号处,使其成为一个完整、正确的程序10。2、在下面程序的横线处填上适当的语句,使该程序执行结果为#in clude<iostrea

17、m.h>class MyClasspublic:为X置值取X的值p rivate:int x;int mai n()MyClass my(10); cout<<my.GetNum()<<e ndl; return 0;#3、完成下面的类定义。class MyClassp ublic:MyClass() x=0; int GetNum(p rivate: int X;;int GetNum(return my. x;4、下面的类定义了拷贝构造函数,请完成该类的定义和实现。class MyClassp ublic:MyClass(i nt xx,i nt yy) X=

18、xx; Y=yy; private:int X,Y;MyClass:X= ;my);my)/拷贝构造函数原型/拷贝构造函数的实现5、下列程序在构造函数和析构函数中申请和释放类的私有成员,请完成该类的实现。class MyClasspublic:MyClass( int a);MyClass(); private:int *X;MyClass:MyClass(i nt a) MyClass:MyClass()116、下列程序通过把类Distanee定义为类Point的友元类来实现计算两点之间距离的功能。请完成该程序。#in clude<iostream.h>#in clude<

19、math.h>class Pointpublic: ;P oi nt()X=a;Y=b;void Print()cout<<"X="<<X<<e ndl;cout<<"Y="<<Y<<e ndl;private:float X,Y;;class Dista neepublic:float Dis (P oi nt &p,Point &q);;float Dista nce:Dis( Point &p,Point &q)float result;_

20、;cout<<result<<e ndl;return result;int mai n()P oi nt p(10,10),q;Dista nee d; d.Dis( p,q);return 0;继承和派生、单项选择题171、C+语言建立类族是通过()实现的。A 、类的嵌套B、虚函数C、类的继承D 、抽象类2、继承具有( 继承间接基类的成员。),即当基类本身也是某一个类的派生类时,底层的派生类也会自动A 、规律性B、传递性C、重复性D、多样性3、下列对派生类的描述中, 错误的 是()。A、一个派生类可以作为另一个派生类的基类B、派生类至少有一个基类C、派生类的缺省继承

21、方式是 private)。D、派生类只继承了基类的公有成员和保护成员4、下列关于继承的描述中, 错误的 是(A、析构函数不能被继承B、派生类是基类的组合C、派生类的成员除了它自己的成员外,还包含了它的基类的成员D、派生类中继承的基类成员的访问权限到派生类保持不变5、派生类的对象对它的基类成员中()是可以访问的。A、公有继承的公有成员B、公有继承的私有成员C、公有继承的保护成员D、私有继承的公有成员6、下列说法中 错误的 是)。A、公有继承时基类中的B、公有继承时基类中的C、私有继承时基类中的D、保护继承时基类中的public 成员在派生类中仍是 public 的 private 成员在派生类中

22、仍是 private 的 public 成员在派生类中是private 的public 成员在派生类中是protected 的7、下面叙述 错误的 是()。A、基类的B、基类的C、基类的D、基类的Protected成员在派生类中仍然是protected的protected 成员在 public 派生类中仍然是 protected 的 protected 成员在 private 派生类中是 private 的 protected 成员不能被派生类的对象访问8、下面叙述 错误的 是()。A、对基类成员的访问权限,在private派生类中和public派生类中是不同的B、基类的private成员在p

23、ublic派生类中不可直接访问C、基类中的public成员在Protected派生类中是 protected的D、 基类中的Public成员在Protected派生类中仍然是public的)。9、C+体系中,不能被派生类继承的有(10、下面叙述 错误的 是()。A、 派生类可以使用private派生B、对基类成员的访问必须是无二义性的C、基类成员的访问权限在派生类中维持不变D、赋值兼容规则也适用于多继承的组合二、分析下列各程序的运行结果1、源程序如下:#include<iostream >using namespace std;class Personpublic:Person(

24、) cout<<"Constructor of Person"<<endl;Person( ) cout<<"Destructor of Person"<<endl;class Student: public Personpublic:Student( ) cout<<"Constructor of Student"<<endl;Student( ) cout<<"Destructor of Student"<<endl

25、; ;class Teacher: public Personpublic:Teacher( ) cout<<"Constructor of Teacher"<<endl; Teacher( ) cout<<"Destructor of Teacher"<<endl; ;void main( )Student s;Teacher t;2、源程序如下:#include<iostream > using namespace std; class Base public: int x;void Pri

26、nt( ) cout<<"Base:x is "<<x<<endl; ;class Derived1: public Basepublic:void Print( ) cout<<"Derived1:x is "<<x<<endl; ;class Derived2: private Basepublic:Derived2( ) Base:x=4; int x;void Print( )cout<<"Derived2's Base:x is "&

27、lt;<Base:x<<endl; cout<<"Derived2:x is "<<x<<endl;void main( )Base objB;Derived1 objD1;Derived2 objD2; objD2.x=1+(objD1.x=1+(objB.x=1); objB.Print( );objD1.Print( );objD2.Print( );3、源程序如下: #include<iostream > using namespace std;class Baseint x,y;protected:

28、inta,b;public:voidSetX(int X) x=X;voidSetY(int Y) y=Y;int GetX( ) returnx; int GetY( ) returny; ;class Derived :public Basep ublic:voidSetXY(i nt X,i nt Y) SetX(X); SetY(Y); voidSetAB(i nt A,i nt B)a=A; b=B; int GetSumXY( ) returnGetX( )+GetY( ); int GetSumAB( ) returna+b; ;void mai n()Derived objD;

29、objD.SetXY(1,2);objD.SetAB(10,20);cout<<"x+y="<<objD.GetSumXY( )<<e ndl;cout<<"a+b="<<objD.GetSumAB( )<<e ndl;三、程序填空(请将最合适的语句填入各标号处,使其成为一个完整、正确的程序1、在划线处填上适当的语句,完成下列程序。#in clude<iostream >#in clude<cmath >using n ames pace std;class

30、Pointpublic:Poin t(double a,double b,double c)double Getx( ) return X; double Gety( ) return Y; double Getz( ) return 乙private:p rotected:;class Line: p ublic Pointpublic:Lin e(double a,double b,double c,double d) void show()cout<<Getx( )<<e ndl;cout<<Gety( )<<" "&l

31、t;<Y<<e ndl;cout<<Getz( )<<" "<<Z<<e ndl;cout<<K<<e ndl;private:double K;;void mai n()Li ne obj(1.2,3.4,5.6,7.8);obj.show();2、根据基类的定义和测试程序,完成下面派生类的定义。#in cludeVostream >using n ames pace std;class Point public:P oi nt(i nt i=0,i nt j=0)X=i; Y

32、=j; void Move(i nt xOff,i nt yOff) X+=xOff; Y+=yOff; int GetX( ) return X; int GetY( ) return Y; private:int X,Y;class Recta ngle: p rivatePoint public:Rectangle(int x,int y,int w,int h).void Move(i nt xOff,i nt yOff)int GetX( ) int GetY( ) int GetW( ) int GetH( ) private:int W,H;void mai n()Recta n

33、gle rect(1,2,3,4);rect.Move(5,6);cout<<"The data of rect(X,Y,W,H):("<<rect.GetX( )<<","<<rect.GetY( )<<","<<rect.GetW( )<<","<<rect.GetH( )<<")"<<e ndl;3、在横线处填上适当的语句,完成程序。#in cludeVostream &

34、gt;using n ames pace std;class Apublic:void f(int i) cout<<i<<e ndl; void g( ) cout<<"g"<<e ndl; ;class B: p rivate Apublic:void h( ) cout<<"h"<<e ndl; ;void mai n()B d1;d1.f(6);.h();运算符重载与多态性、单项选择题A、?B、C、newD、&&2、下列运算符不能用友元函数重载的是()。A、+

35、B、=C、*D、<<3、在一个类中可以对一个操作符进行()重载。A、1种B、2种以下C、3种以下D、多种)运算符在C+中不能重载。1、下列运算符中,(4、友元运算符obj1>obj2被C+编译器解释为()。B、> (obj1, obj2)A、operator > (obj1, obj2)C、obj2.operator > (obj1)D、obj1.operator > (obj2)5、下列关于 Cii运算符函数的返回类型的描述中,错误的是A、可以是类类型C、可以是void类型D、可以是float类型B、可以是时类型216、下列关于运算符重载的描述中,正

36、确的是(A、运算符重载可以改变运算符的操作数的个数C、定使用静态联编D、不一定使用动态联编B、运算符重载可以改变优先级C、运算符重载可以改变结合性D、运算符重载不可以改变语法结构7、下列关于动态联编的描述中,错误的是(A、动态联编是以虚函数为基础的B、动态联编是在运行时确定所调用的函数代码的C、动态联编调用函数操作是指向对象的指针或对象引用D、动态联编是在编译时确定操作函数的8 关于虚函数的描述中,正确的是(A、虚函数是一个静态成员函数B、虚函数是一个非成员函数C、虚函数既可以在函数说明时定义,也可以在函数实现时定义开【D、派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类9、对虚函数的

37、调用(定使用动态联编B、必须使用动态联编10、编译时的多态性可以通过使用(A、虚函数和指针B、重载函数和析构函数D、虚函数和引用11、实现运行时的多态性要使用(A、重载函数B、构造函数C、析构函数D、虚函数12、要实现动态联编,必须通过()调用虚函数。A、对象指针B、成员名限定C、对象名D、派生类名13、在派生类中重新定义虚函数时,除了 的虚函数保持一致。)方面,其他方面都必须与基类中相应A、参数个数B、参数类型C、函数名称D、函数体F面关于构造函数和析构函数的描述,错误的是(A、析构函数中调用虚函数需用静态联编B、对虚析构函数的调用可以采用动态联编C、当基类的析构函数是虚函数时,其派生类的析

38、构函数也一定是虚函数D、构造函数可以声明为虚函数15、关于纯虚函数和抽象类的描述中,错误的是(A、纯虚函数是一种特殊的虚函数,它没有具体的实现B、抽象类是指具有纯虚函数的类C、一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类D、抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出16、下列描述中,()是抽象类的特性。A、可以说明虚函数B、可以进行构造函数重载C、可以定义友元函数D、不能说明其对象2317、()是一个在基类中说明的虚函数,它在该基类中没有定义但要求任何派生类 都必须定义自己的版本。A、虚析构函数B、虚构造函数C、纯虚函数D、静态成员函数18、如果一个类至少有一个纯虚函数

39、,那么就称该类为(A、抽象类B、虚基类C、派生类D、以上都不对19、以下()成员函数表示纯虚函数。A、virtual int vf(int);B、void vf(int)=0;C virtual void vf()=0;D、virtual voidvf(int) 20、下面的描述中.正确的是(A、virtual可以用来声明虚函数B、含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C、即使基类的构造函数没有参数派生类也必须建立构造函数D、静态数据成员可以通过成员初始化列表来初始化二、分析下列各程序的运行结果1、源程序如下:#in clude<iostream>using n a

40、mes pace std;class Coordpublic:Coord(i nt i=0,i nt j=0) x=i; y=j;void Prin t() cout<<"x="<<x<<",y="<<y<<e ndl;friend Coord op erator + (Coord op);p rivate:int x,y;Coord op erator +(Coord op)+op.x;+o p.y;return op;int mai n()Coord obj(1,2);obj. Prin t

41、();+obj;obj. Prin t();return 0;2、源程序如下:#include<iostream>using namespace std;class Vectorpublic:Vector()Vector(int i,int j)x=i;y=j;friend Vector operator +=(Vector v1,Vector v2);Vector operator -=(Vector v);void display()cout<<"("<<x<<","<<y<<&

42、quot;)"<<endl; private:int x,y;Vector operator +=(Vector v1,Vector v2)v1.x+=v2.x;v1.y+=v2.y;return v1;Vector Vector:operator -=(Vector v)Vector temp;temp.x=x-v.x;temp.y=y-v.y;return temp;int main()Vector v1(1,2),v2(3,4),v3,v4;v3=v1+=v2;v4=v1-=v2;cout<<"v1="v1.display();cou

43、t<<"v2="v2.display();cout<<"v3="v3.display();cout<<"v4="v4.display();return 0;3、源程序如下:#include<iostream.h>25virtual void fun1() cout<<"base fun1."<<endl; virtual void fun2() cout<<"base fun2."<<endl; vo

44、id fun3() cout<<"base fun3."<<endl; void fun4() cout<<"base fun4."<<endl;class derived:public basevirtual void fun1() cout<<"derived fun1."<<endl;virtual void fun2(int x) cout<<"derived fun2."<<endl; virtual void

45、 fun3() cout<<"derived fun3."<<endl; void fun4() cout<<"derived fun4."<<endl;int main()base *pb; derived d; pb=&d; pb->fun1(); pb->fun2(); pb->fun3(); pb->fun4(); return 0;4、源程序如下:#include<iostream.h>class B0 public:virtual void display()=0;class B1:public B0 public:void display() cout<<"B1:display()"<<endl; ;class D1:public B1 public:void display() cout<<"D1:display()"<<endl; ;void fun(B0 *ptr) ptr->display();int main()BO *p;B1 b1;D1 d1; p=&b1; fun

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论