《2022年面向对象程序设计复习题 2.pdf》由会员分享,可在线阅读,更多相关《2022年面向对象程序设计复习题 2.pdf(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 1面向对象程序设计复习题一、单项选择题1.A、类B、多态C、友元D、重载答案:A 2.下列对常量的定义中,错误的是()。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 常成员函数类型 成员函数名Const 4 指向对象的常指针类名*Const 指针变量名=对象地址5 指向常变量的指针变量Const 类型名*
2、指针变量名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;名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 28 页 -2 答案:D 4.下列对构造函数和析构函数的描述中,错误的是()。A、构造函数可以重载 B、析构函数名与类名相同 C、构造函数中可以设置参数的缺省值 D、类中只有一个析构函数答案:B 5.下列对友元的描述中,错误的是()。A、友元破坏了类的封装性B、友元提高了程序的
3、运行效率C、友元可以在类外声明和定义D、友元能够访问类中的私有成员答案:C 6.下列对继承的描述中,正确的是()。A、派生类对象能够访问基类的公有成员B、派生类继承了基类的公有成员和保护成员C、派生类对象不能访问基类的保护成员D、派生类不改变基类成员的访问权限答案:C 7.程序中,编译时出错的语句是()。class Base;class Derived:public Base ;Derived objD1;Base objB=objD1;/A Base*pb=&objD1;/B Base&refB=objD1;/C Derived objD2=objB;/D 答案:B 8.下面对派生类的描述中
4、,正确的是()。A、派生类是对基类的具体化名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 28 页 -3 B、一个派生类可以作为另一个派生类的基类C、派生类只能有一个直接基类D、派生类的缺省继承方式是public 答案:B 9.实现动态联遍必须通过()调用虚函数。A、对象引用B、成员名限定C、对象名 D、构造函数答案:A 10.C+流中重载的运算符。A、用于输出操作的非成员函数B、用于输入操作的非成员函数C、用于输出操作的成员函数D、用于输入操作的成员函数答案:B 11.A、多态B、对象C、类D、继承答案:A 12.下列对常量的定义中,错误的是()。A、int const siz
5、e=10;B、char*const p=Good Luck;C、void const print();D、const MyClass obj(10,10);答案:C 13.设 Address 表示整型变量x 的地址,则下列语句执行后的输出结果为()。int x=100,&r=x;coutx-rendl;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 28 页 -4 A、Address-100 B、100-Address C、Address-Address D、100-100 答案:D 14.若函数原型为void Fun(int x=9,int y=8,char z=7),则下。A
6、、Fun()B、Fun(3,0)C、Fun(1,2)D、Fun(2,4,a)答案:B 15.若有如下函数声明: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;答案:C 16.下列对构造函数和析构函数的描述中,正确的是()。A、析构函数不可以重载 B、构造函数不能定义为内联函数 C、构造函数中不能设置参数的缺省值 D、析构函数名与类名不同答案:A 17.下面对静态成员的描述中,错误的是()。A
7、、静态成员的提出是为了解决数据共享问题B、静态数据成员的初始化在类体外进行C、类的不同对象有不同的静态数据成员值D、静态成员函数可以直接访问类中的静态数据成员答案:C 18.下列对友元的描述中,正确的是()。A、友元可以在类外声明和定义名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 28 页 -5 B、友元降低了程序的运行效率C、友元不能访问类中的保护成员D、友元破坏了类的封装性答案:D 19.下列对继承的描述中,错误的是()。A、派生类对象不能访问基类的保护成员B、派生类对基类成员的访问权限随着继承方式而改变C、派生类成员可以访问基类的私有成员D、派生类继承了基类的所有成员答案
8、:C 20.程序中,编译时出错的语句是()。class Base;class Derived:public Base ;Derived objD1;Base objB=objD1;/A Base*pb=&objD1;/B Base&refB=objD1;/C Derived objD2=objB;/D 答案:D 21.下面对派生类的描述中,错误的是()。A、派生类是对基类的具体化B、派生类能够作为基类继续派生新类C、派生类可以有多个直接基类D、派生类的缺省继承方式是private 答案:A 22.实现动态联遍不能通过()调用虚函数。A、构造函数B、对象引用C、对象指针 D、成员函数答案:A 名
9、师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 28 页 -6 23.下面()不是抽象类的特性。A、可以说明纯虚函数B、不能说明抽象类的对象C、用做基类,提供公共的接口D、可以定义虚构造函数答案:D 24.C+流中重载的运算符。A、用于输出操作的成员函数B、用于输出操作的非成员函数C、用于输入操作的成员函数D、用于输入操作的非成员函数答案:B 25:下列有关类的说法不正确的是()。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 分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 28 页 -7 27:()的功能是对象进行初始化。A析构函数B.数据成员C.构造函数D.静态成员函数答案:C 分析:当一个对象定义时,C+编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C+编译
11、系统自动调用析构函数注销该对象并进行善后工作;28:下列表达方式正确的是()。Aclass P Bclass P public:public:int x=15;int x;void show()coutx;void show()coutx;C class P D.class P int f;public:;int a;f=25;void Seta(int x)a=x;答案:D 分析:在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。29:拷贝构造函数具有的下列特点中,()是错误的。A如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B拷
12、贝构造函数只有一个参数,并且是该类对象的引用C拷贝构造函数是一种成员函数D 拷贝构造函数的名字不能用类名名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 28 页 -8 答案:D 分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。30:关于静态成员的描述中,()是错误的。A静态成员可分为静态数据成员和静态成员函数B静态数据成员定义后必须在类体内进行初始化C静态数据成员初始化不使用其构造函数D静态数据成员函数中不能直接引用非静态成员答案:B
13、分析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。31:关于友元的描述中,()是错误的。A友元函数是成员函数,它被说明在类体内B友元函数可直接访问类中的私有成员C友元函数破坏封装性,使用时尽量少用D友元类中的所有成员函数都是友元函数答案:A 分析:友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一般的普通函数;由于它可以直
14、接访问类的私有成员,因此破坏了类的封装性和隐藏性,尽量少用。名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 28 页 -9 二、填空题1.下列运算符既可以作为类的成员函数重载,也可以作为类的友元函数重载,请在表格中的空白处填上正确的表达式。表达式成员函数友元函数a+b(1)(2)a+(3)operator+(a,0)-a a.operator-()(4)1.答案:(1)a.operator+(b)(2)operator+(a,b)(3)a.operator+(0)(4)operator (0)2.下列程序执行后的输出结果是12,21,22,请将下列程序补充完整。#include
15、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);coutxy,;x=1;y=2;fun2(&x,&y);coutxy,;x=1;y=2;fun3(x,y);coutxyendl;2.答案:(1)int a(2)int*a(3)*a=*b(4)int&a(5)a=b 3.下列程序执行后的输出结果是B0 D00 B1 D23 D B D B,请将下列
16、程序补充完整。名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 28 页 -10 class Base public:Base(int i=0)x=i;coutBx;Base()coutBx;private:int x;class Derived:public Base int y,z;public:_(1)_/Constructor _(2)_/Destructor;void main()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;coutDyz;
17、(2)Derived()coutD;4:设有如下程序结构:class Box ;void main()Box A,B,C;该程序运行时调用(1)次构造函数;调用(2)次析构函数。答案:(1)3(2)3 名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 28 页 -11 分析:每创建一个对象自动调用一次构造函数,在这里创建了A、B、C 三个对象,所以共调用了三次构造函数;每释放一个对象,系统自动调用一次析构函数,A、B、C 对象释放时,分别调用析构函数,所以析构函数共调用了三次。5:设 A 为 test 类的对象且赋有初值,则语句 test B(A);表示。答案:将对象A 复制给对
18、象B。分析:执行 test B(A);语句相当于调用了默认复制构造函数,将A 对象的属性复制给B 对象。6:利用“对象名.成员变量”形式访问的对象成员仅限于被声明为(1)的成员;若要访问其他成员变量,需要通过(2)函数或(3)函数。答案:(1)public(2)成员函数(3)友元函数分析:类体内的数据成员可声明为公有的、私有的和保护的,公有的数据成员可利用“对象名.成员变量”形式来进行访问;私有的数据成员能被类中的其他成员函数或友元函数所调用;保护的数据成员可以在类体中使用,也可以在派生类中使用,但不能在其他类外通过对象使用。三、阅读程序题1.#include class T est publ
19、ic:Test(double m,double n,double d):p(d)x=m;y=n;void Show();void Show()const;private:double x,y;名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 28 页 -12 const double p;void Test:Show()coutx,yendl;coutp=pendl;void Test:Show()const coutx,y constendl;coutp=p constendl;void main()Test a(8.9,2.5,3.1416);a.Show();const T
20、 est b(2.5,8.9,3.14);b.Show();答案:8.9 2.5 p=3.1416 2.5 8.9 const p=3.14 const 2.#include class A public:A(int i)coutConstructorendl;p=new int(i);A(A&r)coutCopy constructorendl;p=new int(*r.p);A()coutDestructorendl;delete p;名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 28 页 -13 A&A:operator=(A&r);void output()cout*
21、pendl;private:int*p;A&A:operator=(A&r)coutAssignmentendl;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();答案:Constructor Copy constructor Constructor Assignment 5 Destructor Destructor Destructor 3.#include class Base1 public:Base1(int x)coutB
22、ase1s con.xendl;名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 28 页 -14 Base1()coutBase1s des.endl;class Base2 public:Base2(int x)coutBase2s con.xendl;Base2()coutBase2s des.endl;class Derived:public Base2,public Base1 public:Derived(int x,int y):Base1(y),Base2(x)coutDeriveds con.endl;Derived()coutDeriveds des.endl
23、;void main()Derived obj(1,2);答案:Base2s con.1 Base1s con.2 Deriveds con.Deriveds des.Base1s des.Base2s des.4#include class A int a,b;public:A()a=b=0;名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 28 页 -15 coutDefault Constructing Object a bendl;A(int aa,int bb)a=aa;b=bb;cout Constructing Object a bendl;A()coutDestr
24、ucting Object a bendl;void main()A x,y(2,3),z(4,5);答案:Default Constructing Object 0 0 Constructing Object 2 3 名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 28 页 -16 Constructing Object 4 5 Destructing Object 4 5 Destructing Object 2 3 Destructing Object 0 0 5#include template class FF TT a1,a2,a3;public:FF(TT b1,
25、TT b2,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 x.Sum()y.Sum()endl;名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 28 页 -17 答案:9 21 6:分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。#include class one int a1,a2;public:one(int x1=0,x2=0);void main()one data(2,3);coutdata.a1endl;coutdata.
26、a2endl;分析:出错原因:构造函数参数表语法错;构造函数没有函数体;类的对象不能直接访问类的私有成员变量。改正后的程序如下:#include 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 data(2,3);coutdata.geta1()endl;coutdata.geta2()endl;7:分析以下程序的错误原因,给出修改方案使之能正确运行。名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页
27、,共 28 页 -18#include class Amplifier float invol,outvol;public:Amplifier(float vin,float vout)invol=vin;outvol=vout;float gain();Amplifier:float gain()return outvol/invol;void main()Amplifier amp(5.0,10.0);coutgain()endl;分析:成员函数在类体外定义格式是:函数返回类型类名:成员函数名(参数表);成员函数调用格式是:对象名.成员函数名(参数表)。改正后的程序如下:#include
28、class Amplifier float invol,outvol;public:Amplifier(float vin,float vout)invol=vin;outvol=vout;float gain();float Amplifier:gain()return outvol/invol;void main()Amplifier amp(5.0,10.0);coutamp.gain()endl;8:下列程序的运行结果是。#include 名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 28 页 -19 class point int x,y;public:point(
29、int a,int b)x=a;y=b;coutcalling the constructor function.endl;point(point&p);friend point move(point q);point()coutcalling the destructor function.n;int getx()return x;int gety()return y;point:point(point&p)x=p.x;y=p.y;coutcalling the copy_initialization constructor function.n;point move(point q)cou
30、tOK!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);coutp=p.getx(),p.gety()ms)coutError!endl;exit(1);MS=ms;n=nn;a=new intMS;for(int i=0;in;i+)ai=aai;int Count(int x);/从数组 a 的前 n 个元素中统计出其/值等于 x 的个数并返回。;答案:int AA:Count(int x)名师资料总结-精品资料欢迎下载-名师精心整
31、理-第 21 页,共 28 页 -22 int i,c=0;for(i=0;ims)coutError!endl;exit(1);MS=ms;n=nn;a=new intMS;名师资料总结-精品资料欢迎下载-名师精心整理-第 22 页,共 28 页 -23 for(int i=0;in;i+)ai=aai;int Search(int x);/从数组 a 的前 n 个元素中顺序查找值为x 的第一个元素,/若查找成功则返回元素的下标,否则返回-1。;答案:int AA:Search(int x)int i;for(i=0;ims)coutError!endl;exit(1);MS=ms;n=nn
32、;a=new intMS;for(int i=0;in;i+)ai=aai;int MaxMin(int&x,int&y);/从数组 a 的前 n 个元素中求出/最大值和最小值,并分别由引用参数x 和 y 带回,/同时若 n 大于 0 则返回 1,否则返回0。;答案:int AA:MaxMin(int&x,int&y)int mx,my;名师资料总结-精品资料欢迎下载-名师精心整理-第 24 页,共 28 页 -25 mx=my=a0;for(int i=1;imx)mx=ai;if(ai0)return 1;else return 0;4.根据下面类中Compare 函数成员的原型和注释写出
33、它的类外定义。class AA int*a;int n;int MS;public:void InitAA(int aa,int nn,int ms)if(nnms)coutError!endl;exit(1);MS=ms;n=nn;名师资料总结-精品资料欢迎下载-名师精心整理-第 25 页,共 28 页 -26 a=new intMS;for(int i=0;in;i+)ai=aai;int Compare(AA b);/比较*this 与 b 的大小,若两者中/的 n 值相同,并且数组中前n 个元素值对应/相同,则认为两者相等返回1,否则返回0。;答案:int AA:Compare(AA b)if(n!=b.n)return 0;for(int i=0;ims)coutError!endl;exit(1);MS=ms;n=nn;a=new intMS;for(int i=0;ib.n)k=b.n;else k=n;for(int i=0;ib.ai)return 1;else if(aib.ai)return-1;if(k=n&k=b.n)return 0;else if(kn)return 1;else return-1;名师资料总结-精品资料欢迎下载-名师精心整理-第 28 页,共 28 页 -