面向对象程序设计(C)复习题.doc

上传人:wux****ua 文档编号:10165732 上传时间:2020-04-10 格式:DOC 页数:26 大小:119KB
返回 下载 相关 举报
面向对象程序设计(C)复习题.doc_第1页
第1页 / 共26页
面向对象程序设计(C)复习题.doc_第2页
第2页 / 共26页
面向对象程序设计(C)复习题.doc_第3页
第3页 / 共26页
点击查看更多>>
资源描述
一 选择题(共 45题)1对类的构造函数和析构函数描述正确的是( )。A. 构造函数可以重载,析构函数不能重载 B. 构造函数不能重载,析构函数可以重载C. 构造函数可以重载,析构函数也可以重载D. 构造函数不能重载,析构函数也不能重载2继承具有( ),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。 A)规律性 B.传递性 C.重复性 D.多样性3假设OneClass为一个类,则该类的复制初始化构造函数的声明语句为( )。A.OneClass(OneClass p); B. OneClass& (OneClass p );C. OneClass(OneClass & p); D. OneClass (OneClass * p);4对于结构中定义的成员,其默认的访问权限为( )。A.public B. protected C.private D. static5下面对静态数据成员的描述中,不正确的是( )。A.静态数据成员可以在类体内进行初始化B.静态数据成员不可以在类体内进行初始化C.静态数据成员能受private控制符的作用D.静态数据成员调用前必须初始6. C+中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。 A.复用 B.继承 C.封装 D.引用7. 假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为( )。 A. x(a) B. xa C. x-a D. x.a 9. 对于一个类的构造函数,其函数名与类名( )。 A. 完全相同 B. 基本相同 C. 不相同 D. 无关系10. 一个类的构造函数通常被定义为该类的( )成员。 A. 公有 B. 保护 C. 私有 D. 友元11. 一个类的析构函数通常被定义为该类的( )成员。 A. 私有 B. 保护 C. 公有 D. 友元12. 一个类的静态数据成员所表示属性 ( )。 A. 是类的或对象的属性 B. 只是对象的属性 C. 只是类的属性 D. 类和友元的属性 13.类的析构函数的作用是( )。A一般成员函数 B类的初始化 C对象初始化 D删除对象之前的善后工作14.下列对基类和派生类关系的描述中,错误的是( )。 A派生类是基类的具体化 B派生类是基类的子集 C派生类是基类定义的延续 D派生类是基类的组合15.下列对派生类的描述中,错误的是( )。 A一个派生类可以作为另一个派生类的基类 B派生类至少有一个基类 C派生类的缺省继承方式是private D派生类只继承了基类的公有成员和保护成员16.下列对继承的描述中,错误的是( )。 A析构函数不能被继承 B派生类也是基类的组合 C派生类的成员除了它自己的成员外,还包含了它的基类的成员 D派生类中继承的基类成员的访问权限到派生类保持不变17.派生类的对象对它的基类成员中( )是可以访问的。 A公有继承的公有成员 B公有继承的私有成员 C公有继承的保护成员 D私有继承的公有成员18.下列说法错误的是( )。 A公有继承的基类中的public成员在派生类中仍是public的 B公有继承的基类中的private成员在派生类中仍是private的 C私有继承的基类中的public成员在派生类中仍是private的 D保护继承的基类中的public成员在派生类中仍是protected的19.下面叙述错误的是( )。 A基类的protected成员在派生类中仍然是protected B基类的protected成员在public派生类中仍然是protected的C基类的protected成员在private派生类中是private的 D基类的protected成员不能被派生类的对象访问20设置虚基类的声明中,正确的是( )。A.简化程序 B.消除二义性 C.提高运行效率 D.减少目标代码21关于虚函数的描述中,正确的是()。 A虚函数是一个静态成员函数 B虚函数是一个非成员函数 C虚函数即可以在函数说明定义,也可以在函数实现时定义 D派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型22下列描述中,( )是抽象类的特征。 A可以说明虚函数 B可以进行构造函数重载 C可以定义友元函数 D不能说明其对象23. 静态数据成员的初始化是在( )中进行的。 A. 构造函数 B. 任何成员函数 C. 所属类 D. 全局区24. 当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的( )。 A. 只能是公有成员 B. 只能是保护成员 C. 只能是除私有成员之外的任何成员 D. 具有任何权限的成员25. 在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是( )。 A. 作为友元函数重载的1元运算符 B. 作为成员函数重载的1元运算符 C. 作为友元函数重载的2元运算符 D. 作为成员函数重载的2元运算符26. 关于运算符重载,下列说法正确的是( )。 A. 重载时,运算符的优先级可以改变。 B. 重载时,运算符的结合性可以改变。 C. 重载时,运算符的功能可以改变。 D. 重载时,运算符的操作数个数可以改变。27. 从一个基类派生出的各个类的对象之间( )。 A. 共享所有数据成员,每个对象还包含基类的所有属性 B. 共享部分数据成员,每个对象还包含基类的所有属性 C. 不共享任何数据成员,但每个对象还包含基类的所有属性 D. 共享部分数据成员和函数成员28. C+的继承性允许派生类继承基类的( )。 A. 部分特性,并允许增加新的特性或重定义基类的特性 B. 部分特性,但不允许增加新的特性或重定义基类的特性 C. 所有特性,并允许增加新的特性或重定义基类的特性 D. 所有特性,但不允许增加新的特性或重定义基类的特性29. 派生类的成员函数可以直接访问基类的( )成员。 A. 所有 B. 公有和保护 C. 保护和私有 D. 私有30. 当派生类中有和基类一样名字的成员时,一般来说,( )。 A. 将产生二义性 B. 派生类的同名成员将覆盖基类的成员 C. 是不能允许的 D. 基类的同名成员将覆盖派生类的成员31关于纯虚函数和抽象类的描述中,错误的是( )。 A纯虚函数是一种特殊的虚函数,它没有具体的实现 B抽象类是指具体纯虚函数的类 C一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类 D抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出32如果一个类至少有一个纯虚函数,那么就称该类为( )。 A抽象类 B虚函数 C派生类 D以上都不对33要实现动态联编,必须通过( )调用虚函数。 A对象指针 B成员名限定 C对象名 D派生类名 34.以下( )成员函数表示虚函数。 Avirtual int vf(int); Bvoid vf(int)=0; Cvirtual void vf()=0; Dvirtual void vf(int) ; 40.下面描述中,正确的是( )。 Avirtual可以用来声明虚函数 B含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类 C即使基类的构造函数没有参数,派生类也必须建立构造函数 D静态数据成员可以通过成员初始化列表来初始化35. 在成员函数中进行双目运算符重载时,其参数表中应带有( )个参数。 A. 0 B. 1 C. 2 D. 336. 在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是( )。 A. 该运算符是一个单目运算符。 B. 该运算符函数有一个隐含的参数this。 C. 该运算符函数是类的成员函数。 D. 该运算符函数是类的友元函数。37. 下面对于友元函数描述正确的是( )。 A友元函数的实现必须在类的内部定义B友元函数是类的成员C友元函数破坏了类的封装性和隐藏性D友元函数不能访问类的私有成员38.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该当成员的访问权限定义为( )。 Apublic Bprotected Cprivate Dststic39.下面对静态数据成员的描述中,正确的是( )。A静态数据成员是类的所有对象共享的数据B类的每一个对象都有自己的静态数据成员C类的不同对象有不同的静态数据成员值D静态数据成员不能通过类的对象调用40.C+类体系中,不能被派生类继承的有( )。 A构造函数 B虚函数 C静态成员函数 D赋值操作函数41下列虚基类的声明中,正确的是( )。 Aclass virtual B:public A Bvirtual class B:public A Cclass B:public A virtual Dclass B: virtual public A 42在下面的表达式中,不表示虚继承的是( )。 Avirtual public Bpublic virtual Cpublic D virtual43.下列关于动态联编的描述中,错误的是( )。 A动态联编是以虚函数为基础 B动态联编是运行时确定所调用的函数代码的 C动态联编调用函数操作是指向对象的指针或对象引用 D动态联编是在编译时确定操作函数的44.下面4个选项中,( )是用来声明虚函数的。 Avirtual Bpublic Cusing Dfalse45.编译时的多态性可以通过使用( )获得。 AA虚函数和指针 B重载函数和析构函数 C虚函数和对象 D虚函数和引用二 填空题(共 33题)1.重载插入运算符时,其运算符函数的返回值类型应当是ostream &。2.派生类可以定义其基类 中不具备的数据和操作。3.对象将其大部分实现细节隐藏起来,这种机制称为 封闭。4.建立类和类的对象时,系统对类 不分配内存,系统对对象 分配内存。5.基类和派生类的关系称为继承和派生。6.当保护继承时,基类的公有或保护 成员在派生类中成为保护成员,派生类对象不能直接访问基类的任何 成员。7. C支持两种多态性:编译 时的多态性(重载)和运行 时的多态性(虚函数)。、 8.在C+中定义类时,通常是利用变量 描述对象的“特征”; 利用函数 描述对象的“行为”。 9.假定用户为类AB定义了一个构造函数AB(int aa,char*bbNULL):a(aa),b(bb)”,则该类中至少包含有2个数据成员。 10.类是对象的抽象;而对象则是类的具体实例。11.如果不做特殊说明,类成员的默认访问权限是私有 ; 结构成员的默认访问权限是公有。12.在定义对象的同时初始化其成员变量,需要利用构造函数,用于初始化变量的值可以是固定的常量,也可以通过参数 获得。13.在私有继承关系下,基类的公有成员和保护成员将成为派生类中的私有成员,它们只能由派生类的成员函数来访问;基类的私有成员将成为派生类中的不可访问的成员。14. 在保护继承中,基类中的公有成员、保护成员是可见的。15.面向对象方法构造的系统,其基本单位是对象 。16.生成一个派生类对象时,先调用基类的构造函数,然后调用派生类的构造函数。17.AA operator +(AA x )表示为运算符重载。18.若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上类名 和两个冒号分隔符。19.若采用x.abc(y)表达式调用一个成员函数,在成员函数中使用的*this就代表了类外的x对象。20.假定用户没有给一个名为AB的类定义析构函数,则系统为其定义的析构函数为AB()。 21.类的成员按访问权限可分为三类: 公有 、私有、保护。22在一个类中定义复制构造函数的目的,是为了当利用该类的一个对象初始化另一个对象时,能够避免这两个对象的同一指针同时指向同一块 地址 。23. 假定 AB为一个类,则执行“AB a10;”语句时,系统自动调用该类构造函数的次数为10。 24. 假定要把aa定义为AB类中的一个常量整数型数据成员,则定义语句为const int aa;。25假定AB为一个类,则该类的复制构造函数的函数头为AB(AB & )。 26假定AB为一个类,该类中含有一个指向动态数组空间的指针成员pa,则在该类的析构函数中应该包含有一条delete pa语句。 27. 静态成员函数只能访问类的静态数据成员,非静态成员函数 访问类的非静态数据成员。 28. 一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明必须在函数名前加上 friend 的限定。 29. 一个单目运算符作为类的成员函数重载时有0个参数;如果作为友元函数重载,则有1个参数。 30. 若多个基类及其派生类中都定义了同名函数成员,要访问相应函数时,就需要在函数名前加上基类名和类区分符。 31. 若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以virtual 的方式直接继承它。32. 引进虚基类的根本目的是为了消除二义性。33. 在每个成员函数中,隐含的第一个参数的参数名为this指针。三 写出下列程序的运行结果1. (1)#includestruct abchar a5; float b;void main() ab x=Li,89.6; coutx.atx.bendl;2. (2) #includestruct abchar a ; float b;void f(ab &y) y.a=W; y.b=90.5;void main() ab x=L,89.5; f(x); coutx.atx.bendl;3. (3)#include#includeclass A char a;public: A(char *s) a=new charstrlen(s)+1; strcpy(a,s); coutaendl; A() delete a; coutDestructor!endl; ;void main() A x(Li Ming);A y( Zhang);4. (4) #includeint n=0;class A int a;public: A(int aa=0) a=aa; n+; A() n-;coutnendl;void show() coutnendl;void main() A a; a.show(); A x2; x1.show(); a.show();5. (5) #include class A int a,b; public: A( ) a=b=0;couta bendl; A(int aa,int bb) a=aa;b=bb; couta bendl; ;void main() A x,y(10,5);6. (6 )#includeclass BB int a,b; public: BB(int i=0,int j=1) a=i; b=j; BB operator +(BB c) BB d; d.a=a + c.a*10; d.b=b+c.b*10; return d; BB operator -(BB c) BB d; d.a=a * c.a; d.b=b*c.b; return d; void show() cout(a,b)endl;void main() BB x(2,6) , y(5, 5),z; z=x+y; z.show(); z=x-y; z.show();7. (7) #includeclass EX intx,y; public: EX(int i=0,int j=1) x=i; y=j; EX operator * (EX z) EX d; d.x=x *z.x; d.y=y*z.y; return d; EX operator /(EX c) EX d; d.x=x-c.x; d.y=y-c.y; return d; void show() cout(a,b)endl;void main() EX a(30,10) , b(2,5),c; c=a*b; c.show(); c=a/b; c.show();8. (8)#include class Point int x,y; public: Point()x=1;y=1; Point()coutPoint x,y is deleted.endl; ;void main() Point a;9. (9) #include #include int count=0;class Point int x,y; public: Point() x=1; y=1;count+; Point()count-;;void display() cout There are countpoints. endl;void main() Point a; display(); Point b5; display(); display();10. (10)#include class EX1 int a,b; public: EX1 ( ) a=b=1; couta bendl; EX1 (int aa,int bb=100) a=aa;b=bb; couta bendl; ;void main() EX1 x,y(10,2); EX1z(200); 11. (11) #include #include class Csample int i; public: Csample() cout constructor 1 endl; i=0; Csample(int val) cout Constructor 2 endl;i=val; void Display() couti=iendl; Csample() coutDestructorendl; ;void main()Csample a,b(10); a.Display(); b.Display(); 12. (12) #includeclass Csample private: int i; static int k; public: Csample( ); void Display( );int Csample:k=0; Csample:Csample( ) i=0; k+; void Csample:Display( ) couti=i,k=kendl;void main( ) Csample a,b; a.Display( ); b.Display( );13. (13) #include #includestruct A char c 20 ; float f; ;void f(A &t)strcpy( t.c, ”MALIANG”); t.f=70.5;void main() A z=“LIMING”,77.5; f(z); coutz.ctz.fendl;14. (14)#include class Csample int i; public: Csample( ); void Display( ); Csample();Csample:Csample( ) coutConstructor,; i=0; void Csample:Display() couti=i,; Csample:Csample( ) coutDestructorendl;void main( ) Csample a; a.Display( ); 15. (15)#includeclass base public: void show() cout调用基类函数 show().n; ;class derived: public base public: void show() cout调用派生类函数 show().n; ;void main() base a1; a1.show(); derived a2; a2.show();16. (16)#includeclass ROOT public: int small; ROOT(int n=2) small=n; void showsmall() coutsmall=smallendl; ;class Cder1: public ROOT public: Cder1(int m) :ROOT(m);class Cder2: public ROOT public: int small; Cder2(int n=0) small=n; ;void main() ROOT A; Cder1 bb(3); Cder2 cc; A.showsmall(); bb.showsmall(); cc.showsmall();17. 17.#include#include class CD char *a; char b20; public: CD() a=new char10; strcpy(a, 喂,);strcpy(b,你好!); void Init(char* aa, char *bb) a=new charstrlen(aa)+1;strcpy(a,aa);strcpy(b,bb); void Output() couta bendl; ;void main()CD dx,dy; dx.Output(); dy.Init(中国, 北京,2008);dy.Output();18. 18.#includeclass A int a;public: A(int aa=0): a(aa) couta ; A() cout对象被删除n;void main() A *p; A x2=10,20,y=40;coutendl;p=new A1; coutendl;delete p;coutendl;19. 19. #includeclass A int a10; int n; public: A(int aa, int nn): n(nn) for(int i=0; in; i+) ai=aai; int Get(int i) return ai;int SumA(int n) int s=0; for(int j=0; jn; j+) s+=aj; return s; ;void main() int a=1,1,2,3,5,8; A x(a,3), y(a,4); int d=1;for(int i=0; i3; i+) d*=x.Get(i); int f=y.SumA(4);coutd=dendl;coutf=fendl;20. 20. #includeclass BB int a,b; public: BB(int i=0,int j=1) a=i; b=j; BB operator +(BB c) BB d; d.a=a + c.a; d.b=b+c.b; return d; BB operator -(BB c) BB d; d.a=a - c.a; d.b=b-c.b; return d; void show() cout(a,b)endl;void main() BB x(10,15) , y(5,7),z; z=x+y; z.show(); z=x-y; z.show();21. 21. #include #include class Point int x,y;public:Point(int x1=0, int y1=0) :x(x1), y(y1) coutPoint:x yn; Point() coutPoint des!n;class Text char text100;public:Text(char * str) strcpy(text,str);coutText con!n;Text()coutText des!n;class CircleWithText : public Point,public Text public:CircleWithText(int cx,int cy, char *msg): Point(cx,cy),Text(msg) coutPoint with Text con!n;CircleWithText() coutPoint with Text desn;void main()CircleWithText cm(3,4,hello);22. 22.#includeclass Croot public: int x; Croot( ) x=2;coutConstructor1.n; Croot(int n) x=n; coutConstructor2.n; void showsmall() coutx=xendl; ;class Cder1: public Croot public: Cder1(int m) :Croot(m) ;class Cder2: public Croot public: int x; Cder2(int n=0) x=n; ;void main() Croot A; Cder1 bb(4); Cder2 cc; A.showsmall(); bb.showsmall(); cc.showsmall(); 23. 23.#includeclass Croot public: int small; Croot( ) small=2;cout”Called Constructor1.n”; Croot(int n) small=n; cout”Called Constructor2.n”; void showsmall() coutsmall=smallendl; ;class Cder1: public Croot public: Cder1(int m) :Croot(m);class Cder2: public Croot public: int small; Cder2(int n=0) small=n; ;void main() Croot A; Cder1 bb(4); Cder2 cc; A.showsmall(); bb.showsmall(); cc.showsmall();四 程序1. 定义一个第3题的结构体类型的结构体数组stud,输入学生三门课成绩,然后按总分成绩排序后输出学生成绩。#includestruct stud int no; char name20; int math; int eng; int c; int sum; st10;int n=-1;/表示数组元素当前下标void main() int x=1,i,j; stud t;cout请输入学生记录,按0 结束x;if(x) n+;/读入学号stn.no=x; /读入姓名 cinstn.namestn.mathstn.engstn.c; /读入三门课成绩 stn.sum=stn.math+stn.eng+stn.c;/计算三门课总分else break; for(i=0;in;i+)/采用冒泡排序法对总分排序 for(j=0;jstj+1.sum) t=stj;stj=stj+1;stj+1=t; for(i=0;i=n;i+)/ 输出排序后学生信息 coutsti.no sti.name sti.math sti.c sti.eng sti.sumendl;2. 声明一个哺乳动物Mammal类,再由此派生出狗Dog类,声明一个Dog类的对象,观察基类与派生类的构造函数与析构函数的调用顺序。#includeclass Mammal public: Mammal() coutcall Mammalendl; Mammal() coutDelete base classendl; ;class Dog :public Mammal public: Dog() coutcall Dogn; Dog()coutDelete Dog classn;void main() Dog b; 3. 定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。#include#include#includeclass base /定义一个基类protected: char name20; /姓名 char sex3; /性别 int age; /年龄 ;class teacher:public base /基类派生出教师类 int sno; /工号 char zc20; /职称 double wages; /工资 ;class student :public base /基类派生出学生类 int sno; /学号 char bj10; /班级 char zy10; /专业 double score; /入学成绩 ;4. 建立一个基类Building ,用来存储一座楼房的层数、房间数以及它的总平方英尺数。建立派生类Housing,继承Building,并存储下面的内容:卧室和浴室的数量,另外,建立派生类Office,继承Building,并存储灭火器和电话的数目。然后,编制应用程序,建立住宅楼对象和办公楼对象,并输出它们的有关数据。程序代码:#include class Buildingpublic:Building(int f,int r,double ft)floors=f; rooms=r; footage=ft;void show()cout floors: floorsendl;cout rooms: roomsendl;cout total area: footageendl;protected:int floors;int rooms;double footage;class Housing:public Buildingpublic:Housing(int f,int r,double ft,int bd,int bth):Building(f,r,ft) bedrooms=bd;bathrooms=bth;void show()coutn HOUSING:n; Building:show(); cout bedrooms: bedroomsendl; cout bathrooms: bathroomsendl;private:int bedrooms;int bathrooms;class Office:public Buildingpublic:Office(int f,int r,double ft,int ph,int ex):Building(f,r,ft) phones=ph; extinguishers=ex;void show()coutn HOUSING:n; Building:show(); cout phones: phonesendl; cout extinguishers: extinguishersendl;private:int phones;int extinguishers;void main() Housing hob(5,7,140,2,2); Office oob(8,12,500,12,2); hob.show(); oob.show();5. 声明一个Shape基类,在此基础上派生出Rectangle(矩形)类和Circle(圆)类,二者都有GetArea()函数计算对象的面积。分别求二种图形的面积。(矩形和宽为10,20。圆的半径为3.5)#include #define PI 3.1415926#includeclass base /抽象基类B0声明 public: /外部接口 virtual void display( )= 0; /纯虚函数成员;class circle:public base/公有派生 protected: double r,s,p;public: circle(double x=0) r=x; void display( ) cout圆的面积r*r*PIendl; cout圆的周长PI*r*2endl; /虚成员函数;class incircle:public circle/公有派生 double a;public:incircle(double x=0): circle(x) void display( ) a=sqrt(r); cout内接正方形面积a*aendl; cout内接正方形周长4*aendl; /虚成员函数;class outcircle:public circle/公有派生 public:outcircle(double x=0): circle(x) void display( ) cout外切正方形面积4*r*rendl; cout外切正方形周长8*rdisplay( ); void main( ) /主函数 base *p; /声明抽象基类指针circle b1(10); /声明派生类对象incircle d1(9); /声明派生类对象outcircle e1(10);p=&b1; fun(p);p=&d1; fun(p);p=&e1; fun(p);6. 分别用成员函数和友元函数重载运算符,使对实型的运算符=、+、-、*、/ 适用于复数运算。用友元成员函数重载运算符,使对实型的运算符+、-适用于复数运算。程序:#includeclass complex/复数类声明 public: complex(double r=0.0,double i=0.0) real=r;imag=i; /构造函数 friend complex operator+(complex c1,complex c2); /运算符+重载友元函数 friend complex operator-(complex c1,complex c2); /运算符-重载友元函数 void display( ); /显示复数的值 private: /私有数据成员 double real; double imag;void complex:display( )
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!