版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1面向对象程序设计复习题一、 单项选择题1. ( )是面向对象系统包含的要素。A、类 B、多态 C、友元 D、重载答案:A2. 下列对常量的定义中,错误的是()。A、MyClass const obj(3,4; B、char * const p="hello"C、int i=1; const int &ref=i; D、void show( const;答案:C常量的定义:1常对象Const 类名 对象名【(实参列表)】类名 Const 对象名 【(实参列表)】2 常数据成员Const 类型 常数据成员3 常成员函数 类型 成员函数名 Const4 指向对象的常指针
2、 类名 * Const 指针变量名=对象地址5 指向常变量的指针变量 Const 类型名 * 指针变量名3. 若有如下函数声明:void Fun(int x;,则下列()能与该函数进行重载。A、void Fun(int y; B、void Fun(int x,int y='1'C、int Fun(int x; D、void Fun(int const;答案:D4. 下列对构造函数和析构函数的描述中,错误的是()。A、构造函数可以重载B、析构函数名与类名相同C、构造函数中可以设置参数的缺省值D、类中只有一个析构函数答案:B5. 下列对友元的描述中,错误的是()。A、友元破坏了类的
3、封装性B、友元提高了程序的运行效率C、友元可以在类外声明和定义D、友元能够访问类中的私有成员答案:C6. 下列对继承的描述中,正确的是()。A、派生类对象能够访问基类的公有成员B、派生类继承了基类的公有成员和保护成员C、派生类对象不能访问基类的保护成员D、派生类不改变基类成员的访问权限答案:C7. 程序中,编译时出错的语句是()。class Base ; class Derived : public Base ;Derived objD1;Base objB=objD1; /ABase *pb=&objD1; /BBase &refB=objD1; /CDerived objD
4、2=objB; /D答案:B8. 下面对派生类的描述中,正确的是()。A、派生类是对基类的具体化B、一个派生类可以作为另一个派生类的基类C、派生类只能有一个直接基类D、派生类的缺省继承方式是public答案:B9. 实现动态联遍必须通过()调用虚函数。A、对象引用 B、成员名限定 C、对象名 D、构造函数答案:A10. C+流中重载的运算符>>,是一个( )。A、用于输出操作的非成员函数 B、用于输入操作的非成员函数C、用于输出操作的成员函数 D、用于输入操作的成员函数答案:B11. ( )不是面向对象系统包含的要素。A、多态 B、对象 C、类 D、继承答案:A12. 下列对常量的
5、定义中,错误的是()。A、int const size=10; B、char * const p="Good Luck"C、void const print(; D、const MyClass obj(10,10;答案:C13. 设Address表示整型变量x的地址,则下列语句执行后的输出结果为()。int x=100,&r=x;cout< A、Address-100 B、100-AddressC、Address-Address D、100-100答案:D14. 若函数原型为void Fun(int x=9,int y=8,char z='7'
6、,则下列调用错误的是( )。A、Fun( B、Fun(3, '0'C、Fun(1,2 D、Fun(2,4, 'a'答案:B15. 若有如下函数声明:void Fun(int x;,则下列()不能与该函数进行重载。A、void Fun(int x,int y; B、void Fun(double x;C、void Fun(int x,int y=1; D、void Fun(int x const;答案:C16. 下列对构造函数和析构函数的描述中,正确的是()。A、析构函数不可以重载B、构造函数不能定义为内联函数C、构造函数中不能设置参数的缺省值D、析构函数名与类名
7、不同答案:A17. 下面对静态成员的描述中,错误的是()。A、静态成员的提出是为了解决数据共享问题B、静态数据成员的初始化在类体外进行C、类的不同对象有不同的静态数据成员值D、静态成员函数可以直接访问类中的静态数据成员答案:C18. 下列对友元的描述中,正确的是()。A、友元可以在类外声明和定义B、友元降低了程序的运行效率C、友元不能访问类中的保护成员D、友元破坏了类的封装性答案:D19. 下列对继承的描述中,错误的是()。A、派生类对象不能访问基类的保护成员B、派生类对基类成员的访问权限随着继承方式而改变C、派生类成员可以访问基类的私有成员D、派生类继承了基类的所有成员答案:C20. 程序中
8、,编译时出错的语句是()。class Base ; class Derived : public Base ;Derived objD1;Base objB=objD1; /ABase *pb=&objD1; /BBase &refB=objD1; /CDerived objD2=objB; /D答案:D 21. 下面对派生类的描述中,错误的是()。A、派生类是对基类的具体化B、派生类能够作为基类继续派生新类C、派生类可以有多个直接基类D、派生类的缺省继承方式是private答案:A22. 实现动态联遍不能通过()调用虚函数。A、构造函数 B、对象引用 C、对象指针 D、成员函
9、数答案:A23. 下面()不是抽象类的特性。A、可以说明纯虚函数B、不能说明抽象类的对象C、用做基类,提供公共的接口D、可以定义虚构造函数答案:D24. C+流中重载的运算符<<,是一个( )。A、用于输出操作的成员函数 B、用于输出操作的非成员函数C、用于输入操作的成员函数 D、用于输入操作的非成员函数答案:B25:下列有关类的说法不正确的是( )。A 对象是类的一个实例B 任何一个对象只能属于一个具体的类C 一个类只能有一个对象D 类与对象的关系和数据类型与变量的关系相似答案:C分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,
10、所以一个类可以有多个对象。 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.静态成员函数答案:C分析:当一个对象定义时,C+编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C+编译系统自动调用析构函数注销该对象并进行善后工作
11、; 28:下列表达方式正确的是( )。Aclass P B class Ppublic: public:int x=15; int x;void show(cout< ; void show(cout< ; ; C class P D. class Pint f; public: ; int a;f=25; void Seta (int x a=x;答案:D分析:在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。 29: 拷贝构造函数具有的下列特点中,( )是错误的。A 如果一个类中没有定义
12、拷贝构造函数时,系统将自动生成一个默认的B 拷贝构造函数只有一个参数,并且是该类对象的引用C 拷贝构造函数是一种成员函数D 拷贝构造函数的名字不能用类名答案:D分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。 30:关于静态成员的描述中,( )是错误的。A 静态成员可分为静态数据成员和静态成员函数B 静态数据成员定义后必须在类体内进行初始化C 静态数据成员初始化不使用其构造函数D&
13、#160; 静态数据成员函数中不能直接引用非静态成员答案:B分析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。 31:关于友元的描述中,( )是错误的。A 友元函数是成员函数,它被说明在类体内B 友元函数可直接访问类中的私有成员C 友元函数破坏封装性,使用时尽量少用D
14、60; 友元类中的所有成员函数都是友元函数答案:A分析:友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一般的普通函数;由于它可以直接访问类的私有成员,因此破坏了类的封装性和隐藏性,尽量少用。 二、 填空题1. 下列运算符既可以作为类的成员函数重载,也可以作为类的友元函数重载,请在表格中的空白处填上正确的表达式。表达式成员函数友元函数a+b(1(2a+(3operator + (a, 0-aa.operator - ( (41. 答案: (1 a.operator+(b (2 operator +(a,b (3 a.operator+(0 (4 ope
15、rator (02. 下列程序执行后的输出结果是12,21,22,请将下列程序补充完整。#include 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=a; (5; b=c; void main(int x,y;x=1; y=2; fun1(x,y; cout< x=1; y=2; fun2(&x,&y; cout< x=1; y=2; fun3(x,y; cout< 2. 答案: (
16、1 int a (2 int *a (3 *a=*b (4 int &a (5 a=b 3. 下列程序执行后的输出结果是B0 D00 B1 D23 D B D B,请将下列程序补充完整。class Base public:Base(int i=0 x = i; cout<<'B'< Base( cout<<"B"< private:int x;class Derived : public Base int y, z;public:_(1_/ Constructor_(2_/ Destructor;void main
17、( Derived obj1;Derived obj2(1,2,3;3. 答案:(1 Derived(int a=0,int b=0,int c=0: Base(a y=b; z=c; cout<<'D'< Derived( cout<<"D " 4:设有如下程序结构:class Box ;void main(Box A,B,C; 该程序运行时调用 (1 次构造函数;调用 (2 次析构函数。答案:(13 (23分析:每创建一个对象自动调用一次构造函数,在这里创建了A、B、C三个对象,所以共调用了三次构造函数;每释放一个对象,系统
18、自动调用一次析构函数,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 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< cout<<"p="< void Test:Show( const cout< co
20、ut<<"p="< void main( Test a(8.9,2.5,3.1416;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 class Apublic:A(int i cout<<"Constructor"< A(A& rcout<<"Copy constructor"< p=new int(*r.p; A(cout&l
21、t;<"Destructor"< delete p; A& A:operator =(A& r; void output( cout<<*p< private:int *p;A& A:operator =(A& r cout<<"Assignment"< if(this=&r return *this; delete p;p=new int(*r.p;return *this;void main(A a(5;A b=a; A c(6;c=a; c.output(;答案
22、:ConstructorCopy constructorConstructorAssignment5DestructorDestructorDestructor3. #include class Base1public:Base1(int x cout<<"Base1's con. "< Base1( cout<<"Base1's des. "< ;class Base2public:Base2(int x cout<<"Base2's con. "< Ba
23、se2( cout<<"Base2's des. "< ;class Derived : public Base2,public Base1public:Derived(int x,int y:Base1(y,Base2(x cout<<"Derived's con."< Derived( cout<<"Derived's des."< ;void main(Derived obj(1,2;答案:Base2's con. 1 Base1's
24、con. 2 Derived's con. Derived's des. Base1's des. Base2's des.4# include class A int a,b;public :A( a=b=0;cout<<"Default Constructing Object"<<' '< A(int aa,int bb a=aa; b=bb;cout<<" Constructing Object"<<' '< A( cout&
25、lt;<"Destructing Object"<<' '< ;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 template class FF TT a1,a2,a3;public :FF(TT b1,TT b2,
26、TT b3 a1=b1; a2=b2; a3=b3;TT Sum( return a1+a2+a3; ;void main(FF x(2,3,4,y(5,7,9; cout < 答案:9 216:分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。#include class one int a1,a2;public:one(int x1=0, x2=0;void main(one data(2,3;cout< cout< 分析:出错原因:构造函数参数表语法错;构造函数没有函数体;类的对象不能直接访问类的私有成员变量。改正后的程序如下:#include cla
27、ss 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 data(2,3;cout< cout< 7:分析以下程序的错误原因,给出修改方案使之能正确运行。#include class Amplifierfloat invol,outvol;public:Amplifier(float vin,float voutinvol=vin;outvol=vout;float gain(;Amplifier:fl
28、oat gain( return outvol/invol; void main( Amplifier amp(5.0,10.0;cout<<"nnThe gain is =>"< 分析:成员函数在类体外定义格式是:函数返回类型 类名:成员函数名(参数表);成员函数调用格式是:对象名.成员函数名(参数表)。改正后的程序如下:#include class Amplifier float invol,outvol;public:Amplifier(float vin,float vout invol=vin;outvol=vout;float gain(
29、;float Amplifier:gain( return outvol/invol; void main( Amplifier amp(5.0,10.0;cout<<"nnThe gain is =>"< 8:下列程序的运行结果是 。#include class point int x,y;public:point(int a,int bx=a;y=b;cout<<"calling the constructor function."< point(point &p;friend point
30、 move(point q;point(cout<<"calling the destructor function.n"int getx( return x;int gety( return y;point:point(point &px=p.x; y=p.y;cout<<"calling the copy_initialization constructor function.n"point move(point qcout<<"OK!n"int i,j; i=q.x+10;j=q.y+
31、20;point r(i,j;return r;void main( point m(15,40,p(0,0;point n(m;p=move(n;cout<<"p="< 答案:calling the constructor function.calling the constructor function.calling the copy_initialization constructor function.calling the copy_initialization constructor function.OK!calling the const
32、ructor function.calling the copy_initialization constructor function.calling the destructor function.calling the destructor function.calling the destructor function.P=25,60calling the destructor function.calling the destructor function.calling the destructor function.说明:(1)构造函数执行三次,分别初始化主函数中的对象m,p和m
33、ove函数中的对象r。(2)拷贝构造函数共执行了三次。第一次,初始化对象n;第二次在调用函数move(时,实参n给形参q进行初始化;第三次是执行函数move的return r;语句时,系统用r初始化一个匿名对象时使用了拷贝构造函数。(3)析构函数执行了六次。在退出函数move时释放对象r和q共调用二次;返回主函数后,匿名对象赋值给对象p后,释放匿名对象又调用一次析构函数;最后退出整个程序时释放对象m,n和p调用三次。四、编程题1. 根据下面类中Count函数成员的原型和注释写出它的类外定义。class AA int* a;int n;int MS;public:void InitAA(int
34、aa, int nn, int ms if(nn>ms cout<<"Error!"< MS=ms;n=nn;a=new intMS;for(int i=0; i int Count(int x; /从数组a的前n个元素中统计出其/值等于x的个数并返回。;答案:int AA:Count(int xint i,c=0;for(i=0; i if(ai=x c+;return c;2. 根据下面类中Search函数成员的原型和注释写出它的类外定义。class AA int* a;int n;int MS;public:void InitAA(int aa
35、, int nn, int ms if(nn>ms cout<<"Error!"< MS=ms;n=nn;a=new intMS;for(int i=0; i int Search(int x; /从数组a的前n个元素中顺序查找值为x的第一个元素,/若查找成功则返回元素的下标,否则返回-1。;答案:int AA:Search(int xint i;for(i=0; 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<&l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海工商职业技术学院《阿拉伯语会话》2025-2026学年第一学期期末试卷(A卷)
- 上海工商职业技术学院《安全生产管理知识》2025-2026学年第一学期期末试卷(A卷)
- 第十课 我会听讲说课稿2025学年小学心理健康鄂教版一年级-鄂教版
- 初中环保专题探究2025
- 上饶卫生健康职业学院《安全原理》2025-2026学年第一学期期末试卷(A卷)
- 上海音乐学院《安全检测与监控》2025-2026学年第一学期期末试卷(A卷)
- 2025年动力电池回收材料再生技术标准与质量控制
- 上海震旦职业学院《安全防范系统工程》2025-2026学年第一学期期末试卷(B卷)
- 上海震旦职业学院《AI 设计基础》2025-2026学年第一学期期末试卷(B卷)
- 上海闵行职业技术学院《ARM 嵌入式系统》2025-2026学年第一学期期末试卷(B卷)
- 羽毛球合同协议
- 《应急救援技能培训》课件
- SMT生产工艺流程介绍
- 新模具的试模流程
- 交警农村宣传安全知识
- 2024矿用窄轨车辆连接链安全检测检验作业指导书
- 2025届初中地理中考复习走进国家模块分析练:印度(含解析)
- 食材配送企业管理制度
- 2002版干部履历表(贵州省)
- 2024年安徽省高考历史试卷(真题+答案)
- T-CSAE 176-2021 电动汽车电驱动总成噪声品质测试评价规范
评论
0/150
提交评论