版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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() con st;3.若有如下函数声明:void Fun(int x);,则下列(D)能与该函数形成重载。A、void Fun(int y);C、int Fun(int x);4. 下列对构造函数和析构函数的描述中,错误的是(A、构造函数可以重载B、析构函数名与类名相同C、构造函数中可以设置参数的缺省值
2、D、类中只有一个析构函数5. 下列对友元的描述中,错误的是( C )。A、友元破坏了类的封装性B、友元提高了程序的运行效率C、友元可以在类外声明和定义D、友元能够访问类中的私有成员6. 下列对继承的描述中,正确的是( A )。A、公有派生类对象能够访问基类的公有成员B、派生类只继承了基类的公有成员和保护成员B、void Fun(int x,int y=1);D、void Fun (i nt) con st;B )。C、派生类对象不能访问基类的保护成员D、派生类不改变基类成员的访问权限7.程序中,编译时出错的语句是(D )。class Base ;class Derived : public B
3、ase ;Derived objDI;/ABase objB=objD1;Base *pb=&objD1;/BBase & refB=objD1;/CDerived objD2=objB;/D8. 下面对派生类的描述中,正确的是(B )。A、派生类是对基类的抽象B、一个派生类可以作为另一个派生类的基类C、派生类只能有一个直接基类D、 派生类的缺省继承方式是public9. 实现动态联编必须通过(AA、基类引用B、类名)调用虚函数。C、对象名10. C+流中重载的运算符 ,是一个(BA、用于输出操作的非成员函数C、用于输出操作的成员函数11. ( A )不是基于对象系统包含的要素。A、多态B、对
4、象12. 下列对常量的定义中,错误的是( CA、int const size=10;C、void const print();D、构造函数)。B、用于输入操作的非成员函数D、用于输入操作的成员函数C、类D、继承)B、char * const p=Good Luck;D、const MyClass obj(10,10);13. 设Address表示整型变量x的地址,则下列语句执行后的输出结果为( D )int x=100, &r=x;coutx-re ndl;A、Address-100B、100-AddressC、Address-AddressD、100-10014.若函数原型为 void Fu
5、n (i nt x=9,i nt y=8,char z=7),则下列调用错误的是(B )A、Fun()B、Fun( hello )C、Fun(1,2)D、Fun(2,4, a)15.若有如下函数声明:void Fun (i nt x);,则下列( C )不能与该函数形成重载。A、void Fun(int x,int y);B、void Fun(double x);C、void Fun (i nt x,i nt y=1);D、void Fun (i nt x) con st;16. 下列对构造函数和析构函数的描述中,正确的是( A )。A、析构函数不可以重载B、构造函数不能定义为内联函数C、构造
6、函数中不能设置参数的缺省值D、析构函数名与类名相同17. 下面对静态成员的描述中,错误的是(C )。A、静态数据成员的提出是为了解决数据共享问题B、静态数据成员的初始化在类体外进行C、类的不同对象有不同的静态数据成员值D、静态成员函数可以直接访问类中的静态数据成员18. 下列对友元的描述中,正确的是( D )。A、友元可以在类外声明和定义B、友元降低了程序的运行效率C、友元不能访问类中的保护成员D、友元破坏了类的封装性19. 下列对继承的描述中,错误的是( C )。A、派生类对象不能访问基类的保护成员B、派生类对基类成员的访问权限随着继承方式而改变C、派生类成员可以访问基类的私有成员D、派生类
7、继承了基类的所有数据成员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、派生类能够作为基类继续派生新类C、派生类可以有多个直接基类D、 派生类的缺省继承方式是private22. 实现动态联编不能通过(A )调用虚函数。A、构造函数B、基类引用23. 下面(D
8、)不是抽象类的特性。A、可以说明纯虚函数B、不能说明抽象类的对象C、用做基类,提供公共的接口D、可以定义虚构造函数24. C+流中重载的运算符 ,是一个(C、基类指针D、基类指针或引用B )。B、用于输出操作的非成员函数C、用于输入操作的成员函数D、用于输入操作的非成员函数A、用于输出操作的成员函数25 :下列有关类的说法不正确的是()。A. 对象是类的一个实例B. 任何一个对象只能属于一个具体的类C . 一个类只能有一个对象D .类与对象的关系和数据类型与变量的关系相似答案:C分析:对象是类的一个实例, 类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。26 :下面()项是对构
9、造函数和析构函数的正确定义。A.void X:X(),void X:X()B.X:X(参数),X:X()C.X:X(参数),X:X(参数)D.void X:X(参数),void X:X(参数)答案:B分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。 27 :()的功能是对对象进行初始化。A 析构函数B.数据成员C.构造函数D.静态成员函数答案:C分析:当一个对象定义时,C+编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C+编译系统自动调用析构函数注销该对象并进行善后工作;28 :下列表达方式正确的是()。B. class Ppu
10、blic :int x ;void show()coutx ; D. class Ppublic :int a ;void Seta (int x) a=x;类定义结束时需用分号;只有类中的成员函数才能A. class P public :int x=15 ;void show()coutx ; ;C. class Pint f;;f=25 ;答案:D分析:在类体内不可对数据成员进行初始化; 存取类中的私有数据。29 :拷贝构造函数具有的下列特点中,()是错误的。A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B . 拷贝构造函数至少有一个参数,并且是该类对象的引用C . 拷贝
11、构造函数是一种成员函数D. 拷贝构造函数的名字不能用类名答案:D分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数至少有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型; 拷贝构造函数是一种成员函数。30 :关于静态成员的描述中,()是错误的。A. 静态成员可分为静态数据成员和静态成员函数B . 静态数据成员定义后必须在类体内进行初始化C . 静态数据成员初始化不能在构造函数中完成D . 静态成员函数中不能直接引用非静态成员答案:B分析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它进行初始化,初始化在类体
12、外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。31 :关于友元的描述中,()是错误的。A . 友元函数是成员函数,它被说明在类体内 B .友元函数可直接访问类中的私有成员C .友元函数破坏封装性,使用时尽量少用D .友元类中的所有成员函数都是友元函数答案:A分析:友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一般的普通 函数;由于它可以直接访问类的私有成员,因此破坏了类的封装性和隐藏性,尽量少用。填空题1.下列运算符
13、既可以作为类的成员函数重载,也可以作为类的友元函数重载,请在表格中的空 白处填上正确的表达式。表达式成员函数友元函数a+b(1)(2)a+(3)operator + (a)-aa.operator -()(4)1. 答案: a.operator+(b)(2) operator +(a,b)(3) a.operator+()(4) operator a)2.下列程序执行后的输出结果是#in elude 12,21,22,请将下列程序补充完整。void fun1(1),int b) int c; c=a;a=b;b=c; void fun2(2),int *b) int c; c=*a;(3);
14、*b=c;void fun3(4),int b) int c; c=a;(5); b=c; void mai n()int x,y;x=1; y=2; fun 1(x,y);coutxy,;x=1; y=2; fun2(&x,& y); coutxy,;x=1; y=2; fun 3(x,y); coutxye ndl;(3)*a=*b2. 答案:(1) int a(2) int *a int &a(5) a=b3. 下列程序执行后的输出结果是BO DOO B1 D23 D B D B,请将下列程序补充完整。class Base public:Base(int i=0) x = i; cout
15、Bx ;Base() coutBx ; private:int x;;class Derived : public Base int y,乙public:(1)/ Con structor(2)/ Destructor;void mai n() Derived obj1;Derived obj2(1,2,3);答案: (1) Derived(i nt a=0,i nt b=0,i nt c=0): Base (a) y=b; z=c; coutDyz;(2) Derived() coutD ; 4 :设有如下程序结构:class Box;void mai n()Box A,B,C; 该程序运行
16、时调用次构造函数;调用 次析构函数。答案:(1)3(2)3分析:每创建一个对象自动调用一次构造函数,在这里创建了A、B、C三个对象,所以共调用了三次构造函数;每释放一个对象,系统自动调用一次析构函数,A、B、C对象释放时,分别调用析构函数,所以析构函数共调用了三次。5 :设A为test类的对象且赋有初值,则语句test B(A);表示。答案:用对象A初始化对象B。分析:执行test B(A);语句相当于调用了默认拷贝构造函数,用对象A初始化对象B。6 :在类外,利用“对象名成员名”的形式访问的对象成员仅限于被声明为(1)的成员;若要访问其他成员变量,需要通过 函数或 函数。答案:public(
17、2)成员友元分析:类体内的数据成员可声明为公有的、私有的和保护的,公有的数据成员可利用“对象名成员名”形式来进行访问;私有的数据成员能被类中的成员函数或友元函数所调用;保护的数据成员可以在类体中使用,也可以在派生类中使用,但不能在其他类外通过对象使用。写程序结果题1.答案:#in elude class Test public:Test (double m,double n, double d):p(d) x=m; y=n; void Show();void Show() con st;private:double x, y;const double p;void Test:Show() co
18、utx,ye ndl;coutp=pe ndl;void Test:Show() const coutx,y con ste ndl; coutp=p con ste ndl;void mai n() 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.1416 2.5 8.9 constp=3.14 const2. #in elude class Apublic:A(i nt i) coutC on structore ndl; p=new in t(i);A(A& r)coutCo
19、py con structore ndl; p=new in t(r.p);A()coutDestructore ndl;delete p;A& operator =(A & r);void output() cout*pe ndl;private:int *p;A& A:operator =(A & r) coutAssig nmen te ndl;if(this=&r) return *this;delete p;p=new in t(r.p);return *this;void mai n()A a(5);A b=a;A c(6);c=a;c. output();答案: Co nstru
20、ctorCopy con structorCon structorAssig nment5DestructorDestructorDestructor3.答案:#in elude class Base1public:Base1(i nt x) coutBase1s con. xe ndl; Base1() coutBase1s des. endl; ;class Base2public:Base2(i nt x) coutBase2s con. xe ndl; Base2() coutBase2s des. e ndl; ;class Derived : public Base2,public
21、 Base1public:Derived(int x,int y):Base1(y),Base2(x) coutDeriveds con.endl; Derived() coutDeriveds des.e ndl; ;void mai n()Derived obj(1,2);Base2s con. 1Base1s con. 2 Deriveds con. Deriveds des.Base1s des.Base2s des.4 . # in elude class A int a,b;public :A() a=b=O;coutDefault Con struct ing Object a
22、be ndl;A(i nt aa,i nt bb) a=aa; b=bb;cout Con structi ng Object a be ndl;A() coutDestructi ng Object a be ndl;void mai n()A x,y(2,3),z(4,5);答案:Default Co nstructi ng Object 0 0Co nstruct ing Object23Con struct ing Object4 5Destructi ng Object45Destructi ng Object23Destructi ng Object005 .# include t
23、emplate class FF TT a1,a2,a3;public :FF(TT b1,TT b2,TT b3) a1=b1; a2=b2; a3=b3;TT Sum() return a1+a2+a3; ;void mai n()FF x(2,3,4),y(5,7,9);cout x.Sum()y.Sum()e ndl;答案:9 216 :分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。#in cludeclass oneint a1,a2;public:on e(i nt x1=0, x2=0);void mai n()one data(2,3);coutdata.
24、a1e ndl;coutdata.a2e ndl;分析:出错原因:构造函数参数表语法错;构造函数没有函数体;类的对象不能直接访问类的私 有成员。改正后的程序如下:#in cludeclass one int a1, a2;public:one(int x1=0, int x2=0) a1=x1;a2=x2;int geta1() return a1; in t geta2() return a2; ;void mai n()one data(2,3);coutdata.geta1()e ndl;coutdata.geta2()e ndl;7 :分析以下程序的错误原因,给出修改方案使之能正确运行
25、。#in clude class Amplifierfloat in vol,outvol;public:Amplifier(float vin, float vout)in vol=vi n;o utvol=vout;float gain();Amplifier:float gain() retur n outvol/in vol; void mai n() Amplifier amp(5.0,10.0);coutga in() e ndl;分析:成员函数在类体外定义格式是:函数返回类型类名:成员函数名(参数表);成员函数调用格式是:对象名成员函数名(参数表)。改正后的程序如下:#in el
26、ude class Amplifierfloat in vol,outvol;public: Amplifier(float vin, float vout)in vol=vi n;o utvol=vout;float gain();float Amplifier:ga in() retur n outvol/in vol;void mai n() Amplifier amp(5.0,10.0);coutamp.ga in() e ndl;8 :下列程序的运行结果是。#in clude class point int x,y;public:poin t(i nt a,i nt b)x=a;y=
27、b;coutcalling the constructor function.endl;poin t(po int &p);friend point move(po int q);po in t()coutcall ing the destructor function;int getx()return x;int gety()return y;poin t:po in t(po int &p)x=p.x; y=p.y;coutcalling the copy_initialization constructor function.n; -point move(po int q) coutOK
28、!n;int i,j;i=q.x+10;j=q.y+20;poi nt r(i,j);return r;void mai n() point m(15,40),p(0,0);point n( m);p=move (n);coutp=p.getx(),p.gety() ms) coutError!e ndl; exit(1);MS=ms;n=nn;a=n ew in tMS;for(i nt i=0; in; i+) ai=aai;/从数组a的前n个元素中统计出其/值等于x的个数并返回。int Cou nt(i nt x);答案:int AA:Cou nt(i nt x)int i,c=O;for(i=0; i ms) coutError!e ndl; exit(1);MS=ms;n=nn;a=n ew in tMS;for(i nt i=0; in; i+)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年钱塘湖春行教学设计教资
- 2025-2026学年街舞拼音教学设计
- 2025-2026学年极限台球教学设计海报
- 2025-2026学年远大近小教学设计
- 2025-2026学年一年级连加连减教学设计
- 2025-2026学年组织幼儿游戏教案
- 工程合同评审模板(3篇)
- 2025-2026学年字词的意思教学设计
- 2025-2026学年党的生日教学设计
- 山西省忻州一中、临汾一中、精英中学、鄂尔多斯一中2026届高一生物第二学期期末联考试题含解析
- KA-T 20.1-2024 非煤矿山建设项目安全设施设计编写提纲 第1部分:金属非金属地下矿山建设项目安全设施设计编写提纲
- 汽车检测站的安全应急预案
- 学前儿童健康照护全套教学课件
- 2024年全国高中数学联赛模拟卷(1-7)(一试)附详细解答
- 初中八年级物理课件-4.4 光的折射
- 2023年江苏卷化学高考试题真题(答案+解析)
- 如何做一名优秀的员工
- 隧道工程临时设施标准化图册(图文并茂)
- CB/T 3766-1996排气管钢法兰及垫片
- 《尼尔斯骑鹅旅行记》阅读推荐课课件
- 水平定向钻进记录表
评论
0/150
提交评论