版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象程序设计复习题一、 单项选择题1. (A)是面向对象系统包含的要素。A、类B、多态C、友元D、重载2. 下列对常量的定义中,错误的是(C)。A、MyClass const obj(3,4);B、char * const p="hello"C、int &ref=2;D、void show() const;3. 若有如下函数声明:void Fun(int x);,则下列(D)能与该函数形成重载。A、void Fun(int y);B、void Fun(int x,int y='1');C、int Fun(int x);D、void Fun(int
2、) const;4. 下列对构造函数和析构函数的描述中,错误的是(B)。A、构造函数可以重载B、析构函数名与类名相同C、构造函数中可以设置参数的缺省值D、类中只有一个析构函数5. 下列对友元的描述中,错误的是(C)。A、友元破坏了类的封装性B、友元提高了程序的运行效率C、友元可以在类外声明和定义D、友元能够访问类中的私有成员6. 下列对继承的描述中,正确的是(A)。A、公有派生类对象能够访问基类的公有成员B、派生类只继承了基类的公有成员和保护成员C、派生类对象不能访问基类的保护成员D、派生类不改变基类成员的访问权限7. 程序中,编译时出错的语句是(D)。class Base ;class De
3、rived : public Base ;Derived objD1;Base objB=objD1;/ABase *pb=&objD1;/BBase &refB=objD1;/CDerived objD2=objB;/D8. 下面对派生类的描述中,正确的是(B)。A、派生类是对基类的抽象B、一个派生类可以作为另一个派生类的基类C、派生类只能有一个直接基类D、派生类的缺省继承方式是public9. 实现动态联编必须通过(A)调用虚函数。A、基类引用B、类名C、对象名D、构造函数10. C+流中重载的运算符>>,是一个(B)。A、用于输出操作的非成员函数B、用于输入操
4、作的非成员函数C、用于输出操作的成员函数D、用于输入操作的成员函数11. (A)不是基于对象系统包含的要素。A、多态B、对象C、类D、继承12. 下列对常量的定义中,错误的是(C)。A、int const size=10;B、char * const p="Good Luck"C、void const print();D、const MyClass obj(10,10);13. 设Address表示整型变量x的地址,则下列语句执行后的输出结果为(D)。int x=100,&r=x;cout<<x<<'-'<<r&l
5、t;<endl;A、Address-100B、100-AddressC、Address-AddressD、100-10014. 若函数原型为void Fun(int x=9,int y=8,char z='7'),则下列调用错误的是(B)。A、Fun()B、Fun(“hello”)C、Fun(1,2)D、Fun(2,4, 'a')15. 若有如下函数声明:void Fun(int x);,则下列(C)不能与该函数形成重载。A、void Fun(int x,int y);B、void Fun(double x);C、void Fun(int x,int y=
6、1);D、void Fun(int x) const;16. 下列对构造函数和析构函数的描述中,正确的是(A)。A、析构函数不可以重载B、构造函数不能定义为内联函数C、构造函数中不能设置参数的缺省值D、析构函数名与类名相同17. 下面对静态成员的描述中,错误的是(C)。A、静态数据成员的提出是为了解决数据共享问题B、静态数据成员的初始化在类体外进行C、类的不同对象有不同的静态数据成员值D、静态成员函数可以直接访问类中的静态数据成员18. 下列对友元的描述中,正确的是(D)。A、友元可以在类外声明和定义B、友元降低了程序的运行效率C、友元不能访问类中的保护成员D、友元破坏了类的封装性19. 下列
7、对继承的描述中,错误的是(C)。A、派生类对象不能访问基类的保护成员B、派生类对基类成员的访问权限随着继承方式而改变C、派生类成员可以访问基类的私有成员D、派生类继承了基类的所有数据成员20. 程序中,编译时出错的语句是(D)。class Base ;class Derived : public Base ;Derived objD1;Base objB=objD1;/ABase *pb=&objD1;/BBase &refB=objD1;/CDerived objD2=objB;/D21. 下面对派生类的描述中,错误的是(D)。A、派生类是对基类的具体化B、派生类能够作为基类
8、继续派生新类C、派生类可以有多个直接基类D、派生类的缺省继承方式是private22. 实现动态联编不能通过(A)调用虚函数。A、构造函数B、基类引用C、基类指针D、基类指针或引用23. 下面(D)不是抽象类的特性。A、可以说明纯虚函数B、不能说明抽象类的对象C、用做基类,提供公共的接口D、可以定义虚构造函数24. C+流中重载的运算符<<,是一个(B)。A、用于输出操作的成员函数B、用于输出操作的非成员函数C、用于输入操作的成员函数D、用于输入操作的非成员函数25:下列有关类的说法不正确的是( )。A 对象是类的一个实例B 任何一个对象只能属于一个具体的类
9、C 一个类只能有一个对象D 类与对象的关系和数据类型与变量的关系相似答案:C分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。 26:下面( )项是对构造函数和析构函数的正确定义。Avoid X:X(), void X:X()BX:X(参数), X:X()CX:X(参数), X:X(参数)Dvoid X:X(参数), void X:X(参数)答案:B分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。 27:( )的功能是对对象进行初始化。 A析构函数 B. 数据成员 C.构造函数 D.静态
10、成员函数答案:C分析:当一个对象定义时,C+编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C+编译系统自动调用析构函数注销该对象并进行善后工作; 28:下列表达方式正确的是( )。Aclass P B class Ppublic: public:int x=15; int x; void show()cout<<x; void show()cout<<x; ; C class P D. class P int f; public: ; int a; f=25; void Seta (int x) a=x;答案:D分析:
11、在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。 29: 拷贝构造函数具有的下列特点中,( )是错误的。A 如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B 拷贝构造函数至少有一个参数,并且是该类对象的引用C 拷贝构造函数是一种成员函数D 拷贝构造函数的名字不能用类名答案:D分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数至少有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。 30:
12、关于静态成员的描述中,( )是错误的。A 静态成员可分为静态数据成员和静态成员函数B 静态数据成员定义后必须在类体内进行初始化C 静态数据成员初始化不能在构造函数中完成D 静态成员函数中不能直接引用非静态成员答案:B分析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。 31:关于友元的描
13、述中,( )是错误的。A 友元函数是成员函数,它被说明在类体内B 友元函数可直接访问类中的私有成员C 友元函数破坏封装性,使用时尽量少用D 友元类中的所有成员函数都是友元函数答案:A分析:友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一般的普通函数;由于它可以直接访问类的私有成员,因此破坏了类的封装性和隐藏性,尽量少用。 二、 填空题1. 下列运算符既可以作为类的成员函数重载,也可以作为类的友元函数重载,请在表格中的空白处填上正确的表达式。表达式成员函数友元函数a+b(1)(2)
14、a+(3)operator + (a)-aa.operator - ( )(4)1. 答案: (1) a.operator+(b) (2) operator +(a,b) (3) a.operator+()(4) operator (a)2. 下列程序执行后的输出结果是12,21,22,请将下列程序补充完整。#include <iostream.h>void fun1(1), int b) int c; c=a; a=b; b=c; void fun2(2), int *b) int c; c=*a; (3); *b=c; void fun3(4), int b) int c; c
15、=a; (5); b=c; void main()int x,y;x=1; y=2; fun1(x,y); cout<<x<<y<<','x=1; y=2; fun2(&x,&y); cout<<x<<y<<','x=1; y=2; fun3(x,y); cout<<x<<y<<endl;2. 答案: (1) int a(2) int *a(3) *a=*b (4) int &a(5) a=b 3. 下列程序执行后的输出结果是B0
16、D00 B1 D23 D B D B,请将下列程序补充完整。class Base public:Base(int i=0) x = i; cout<<'B'<<x<<' 'Base() cout<<"B"<<x<<' ' private:int x;class Derived : public Base int y, z;public: _(1)_/ Constructor _(2)_/ Destructor;void main() Derived obj
17、1;Derived obj2(1,2,3);答案:(1) Derived(int a=0,int b=0,int c=0): Base(a) y=b; z=c; cout<<'D'<<y<<z<<' ' (2) Derived() cout<<"D " 4:设有如下程序结构:class Box ;void main()Box A,B,C; 该程序运行时调用 (1) 次构造函数;调用 (2) 次析构函数。答案:(1)3 (2)3分析:每创建一个对象自动调用一次构造函数,在这里创建了A、
18、B、C三个对象,所以共调用了三次构造函数;每释放一个对象,系统自动调用一次析构函数,A、B、C对象释放时,分别调用析构函数,所以析构函数共调用了三次。 5:设A为test类的对象且赋有初值,则语句test B(A); 表示 。答案:用对象A初始化对象B。分析:执行test B(A);语句相当于调用了默认拷贝构造函数,用对象A初始化对象B。6:在类外,利用“对象名.成员名”的形式访问的对象成员仅限于被声明为 (1) 的成员;若要访问其他成员变量,需要通过 (2) 函数或 (3) 函数。答案:(1) public (2) 成员 (3)友元分析:类体内的数据成员可声明为公有的、私有的和保护
19、的,公有的数据成员可利用“对象名.成员名”形式来进行访问;私有的数据成员能被类中的成员函数或友元函数所调用;保护的数据成员可以在类体中使用,也可以在派生类中使用,但不能在其他类外通过对象使用。三、 写程序结果题1. #include <iostream.h>class Test public:Test (double m,double n,double d):p(d) x=m; y=n; void Show();void Show() const;private:double x, y;const double p;void Test:Show() cout<<x<
20、;<","<<y<<endl;cout<<"p="<<p<<endl;void Test:Show() const cout<<x<<","<<y<<" const"<<endl;cout<<"p="<<p<<" const"<<endl;void main() Test a(8.9,2.5,3.1416
21、);a.Show();const Test b(2.5,8.9,3.14);b.Show();答案:8.9 2.5p=3.14162.5 8.9 constp=3.14 const2. #include <iostream.h> class Apublic:A(int i) cout<<"Constructor"<<endl; p=new int(i); A(A& r)cout<<"Copy constructor"<<endl; p=new int(r.p); A()cout<&
22、lt;"Destructor"<<endl;delete p; A& operator =(A& r); void output() cout<<*p<<endl;private:int *p;A& A:operator =(A& r)cout<<"Assignment"<<endl;if(this=&r)return *this; delete p;p=new int(r.p);return *this;void main()A a(5);A b=a;A
23、 c(6);c=a;c.output();答案:ConstructorCopy constructor ConstructorAssignment5DestructorDestructor Destructor3. #include <iostream.h> class Base1public:Base1(int x) cout<<"Base1's con. "<<x<<endl; Base1() cout<<"Base1's des. "<<endl; ;class
24、 Base2public:Base2(int x) cout<<"Base2's con. "<<x<<endl; Base2() cout<<"Base2's des. "<<endl; ;class Derived : public Base2,public Base1public:Derived(int x,int y):Base1(y),Base2(x) cout<<"Derived's con."<<endl; Der
25、ived() cout<<"Derived's des."<<endl; ;void main()Derived obj(1,2);答案:Base2's con. 1Base1's con. 2Derived's con.Derived's des.Base1's des.Base2's des.4# include <iostream.h>class A int a,b;public :A() a=b=0;cout<<"Default Constructing
26、 Object"<<' '<<a<<' '<<b<<endl;A(int aa,int bb) a=aa; b=bb;cout<<" Constructing Object"<<' '<<a<<' '<<b<<endl; A() cout<<"Destructing Object"<<' '<<a&l
27、t;<' '<<b<<endl;void main()A x,y(2,3),z(4,5);答案:Default Constructing Object 0 0Constructing Object 2 3Constructing Object 4 5Destructing Object 4 5Destructing Object 2 3Destructing Object 0 05 # include <iostream.h>template <class TT>class FF TT a1,a2,a3;public :FF
28、(TT b1,TT b2,TT b3) a1=b1; a2=b2; a3=b3;TT Sum() return a1+a2+a3; ;void main()FF <int> x(2,3,4),y(5,7,9);cout <<x.Sum()<<' '<<y.Sum()<<endl;答案:9 216:分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。#include<iostream.h>class one int a1,a2; public:one(int x1=0, x2=0);void
29、main()one data(2,3); cout<<data.a1<<endl; cout<<data.a2<<endl;分析:出错原因:构造函数参数表语法错;构造函数没有函数体;类的对象不能直接访问类的私有成员。改正后的程序如下: #include<iostream.h> class one int a1, a2; public: one(int x1=0, int x2=0) a1=x1;a2=x2; int geta1() return a1; int geta2() return a2; ;void main()one da
30、ta(2,3); cout<<data.geta1()<<endl; cout<<data.geta2()<<endl;7:分析以下程序的错误原因,给出修改方案使之能正确运行。#include <iostream.h>class Amplifier float invol,outvol;public: Amplifier(float vin,float vout) invol=vin;outvol=vout; float gain(); Amplifier:float gain() return outvol/invol; void
31、main() Amplifier amp(5.0,10.0); cout<<"nnThe gain is =>"<<gain()<<endl;分析:成员函数在类体外定义格式是:函数返回类型 类名:成员函数名(参数表);成员函数调用格式是:对象名.成员函数名(参数表)。改正后的程序如下:#include <iostream.h>class Amplifier float invol,outvol;public: Amplifier(float vin,float vout) invol=vin;outvol=vout; f
32、loat gain(); float Amplifier:gain() return outvol/invol; void main() Amplifier amp(5.0,10.0); cout<<"nnThe gain is =>"<<amp.gain()<<endl; 8:下列程序的运行结果是 。#include <iostream.h>class point int x,y;public:point(int a,int b)x=a;y=b; cout<<"calling the c
33、onstructor function."<<endl;point(point &p);friend point move(point q);point()cout<<"calling the destructor function.n"int getx() return x;int gety() return y;point:point(point &p)x=p.x; y=p.y; cout<<"calling the copy_initialization constructor function.
34、n"point move(point q)cout<<"OK!n" int i,j; i=q.x+10; j=q.y+20; point r(i,j); return r;void main() point m(15,40),p(0,0); point n(m); p=move(n); cout<<"p="<<p.getx()<<","<<p.gety()<<endl;答案:calling the constructor function.calling
35、 the constructor function.calling the copy_initialization constructor function.calling the copy_initialization constructor function.OK!calling the constructor function.calling the copy_initialization constructor function.calling the destructor function.calling the destructor function.calling the des
36、tructor function.P=25,60calling the destructor function.calling the destructor function.calling the destructor function.说明:(1)构造函数执行三次,分别初始化主函数中的对象m,p和move函数中的对象r。(2)拷贝构造函数共执行了三次。第一次,初始化对象n;第二次在调用函数move()时,实参n给形参q进行初始化;第三次是执行函数move的return r;语句时,系统用r初始化一个临时对象时使用了拷贝构造函数。(3)析构函数执行了六次。在退出函数move时释放对象r和q共
37、调用二次;返回主函数后,临时对象赋值给对象p后,释放临时对象又调用一次析构函数;最后退出整个程序时释放对象m,n和p调用三次。四、编程题1. 根据下面类中Count函数成员的原型和注释写出它的类外定义。class AA int* a;int n;int MS;public:void InitAA(int aa, int nn, int ms) if(nn>ms) cout<<"Error!"<<endl; exit(1);MS=ms;n=nn;a=new intMS;for(int i=0; i<n; i+) ai=aai;int Cou
38、nt(int x); /从数组a的前n个元素中统计出其 /值等于x的个数并返回。;答案:int AA:Count(int x) int i,c=0; for(i=0; i<n;i+) if(ai=x) c+; return c; 2. 根据下面类中Search函数成员的原型和注释写出它的类外定义。class AA int* a;int n;int MS;public:void InitAA(int aa, int nn, int ms) if(nn>ms) cout<<"Error!"<<endl; exit(1);MS=ms;n=nn;
39、a=new intMS;for(int i=0; i<n; i+) ai=aai; int Search(int x); /从数组a的前n个元素中顺序查找值为x的第一个元素, /若查找成功则返回元素的下标,否则返回-1。;答案:int AA:Search(int x) int i; for(i=0; i<n;i+) if(ai=x) return i; return -1; 3. 根据下面类中MaxMin 函数成员的原型和注释写出它的类外定义。class AA int* a;int n;int MS;public:void InitAA(int aa, int nn, int ms) if(nn>ms) cout<<"Error!"<<endl; exit(1);MS=ms;n=nn;a=new intMS;for(int i=0; i<n;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国仪器仪表行业市场前瞻与投资战略规划分析报告
- 新能源光伏发电建议书可行性研究报告备案
- 推拿选择题复习测试附答案
- 2024年汉中职业技术学院单招职业技能测试题库有答案解析
- 计算所软件室TREC-11报告资料教程
- 2024至2030年中国蛇纹PU革数据监测研究报告
- 2024至2030年中国汽车控制索总成数据监测研究报告
- 2024至2030年中国弹台式气动平面丝印机数据监测研究报告
- 2024年中国马赛克模拟屏屏体市场调查研究报告
- 2024年中国橡胶气床垫市场调查研究报告
- 汽车智能座舱交互体验测试评价规程
- 上海中考考纲词汇默写每天50个(无答案)
- 热工基础课后答案超详细版(张学学)
- 十八项医疗核心制度培训课件
- 食品工艺学(鲁东大学)智慧树知到期末考试答案2024年
- 工地食堂经营方案及计划书
- 2024年汽车驾驶员高级证考试题库及答案
- 正畸计划书模板
- 空中交通管制基础
- 供应商竞价比价表
- 转运呼吸机培训课件
评论
0/150
提交评论