面向对象程序设计c++复习题.docx

上传人:b****4 文档编号:4118249 上传时间:2022-11-28 格式:DOCX 页数:41 大小:30.67KB
下载 相关 举报
面向对象程序设计c++复习题.docx_第1页
第1页 / 共41页
面向对象程序设计c++复习题.docx_第2页
第2页 / 共41页
面向对象程序设计c++复习题.docx_第3页
第3页 / 共41页
面向对象程序设计c++复习题.docx_第4页
第4页 / 共41页
面向对象程序设计c++复习题.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

面向对象程序设计c++复习题.docx

《面向对象程序设计c++复习题.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计c++复习题.docx(41页珍藏版)》请在冰豆网上搜索。

面向对象程序设计c++复习题.docx

面向对象程序设计c++复习题

一选择题(共45题)

1.对类的构造函数和析构函数描述正确的是()。

 

A. 构造函数可以重载,析构函数不能重载√

B. 构造函数不能重载,析构函数可以重载

C. 构造函数可以重载,析构函数也可以重载

D. 构造函数不能重载,析构函数也不能重载

2.继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。

A)规律性B.传递性√C.重复性D.多样性

3.假设OneClass为一个类,则该类的复制初始化构造函数的声明语句为()。

 

A.OneClass(OneClassp);B.OneClass&(OneClassp);

C.OneClass(OneClass&p);√D.OneClass(OneClass*p);

4.对于结构中定义的成员,其默认的访问权限为()。

 

A.publicB.protectedC.privateD.static

5.下面对静态数据成员的描述中,不正确的是()。

 

A.静态数据成员可以在类体内进行初始化√

B.静态数据成员不可以在类体内进行初始化

C.静态数据成员能受private控制符的作用

D.静态数据成员调用前必须初始

6.C++中的类有两种用法:

一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过(   )派生了新的类。

 

A.复用B.继承√C.封装D.引用

7.假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为()。

A.x(a)B.x[a]C.x->aD.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.派生类的缺省继承方式是privateD.派生类只继承了基类的公有成员和保护成员√

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.以下()成员函数表示虚函数。

A.virtualintvf(int);B.voidvf(int)=0;

C.virtualvoidvf()=0;D.virtualvoidvf(int){};√

40.下面描述中,正确的是()。

A.virtual可以用来声明虚函数√

B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类

C.即使基类的构造函数没有参数,派生类也必须建立构造函数

D.静态数据成员可以通过成员初始化列表来初始化

35.在成员函数中进行双目运算符重载时,其参数表中应带有()个参数。

A.0B.1√C.2D.3

36.在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是()。

A.该运算符是一个单目运算符。

B.该运算符函数有一个隐含的参数this。

C.该运算符函数是类的成员函数。

D.该运算符函数是类的友元函数。

37.下面对于友元函数描述正确的是()。

A.友元函数的实现必须在类的内部定义

B.友元函数是类的成员

C.友元函数破坏了类的封装性和隐藏性√

D.友元函数不能访问类的私有成员

38.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该当成员的访问权限定义为()。

A.public√B.protectedC.privateD.ststic

39.下面对静态数据成员的描述中,正确的是()。

A.静态数据成员是类的所有对象共享的数据√

B.类的每一个对象都有自己的静态数据成员

C.类的不同对象有不同的静态数据成员值

D.静态数据成员不能通过类的对象调用

40.C++类体系中,不能被派生类继承的有()。

A.构造函数√B.虚函数C.静态成员函数D.赋值操作函数

41下列虚基类的声明中,正确的是()。

A.classvirtualB:

publicAB.virtualclassB:

publicA

C.classB:

publicAvirtualD.classB:

virtualpublicA√

42在下面的表达式中,不表示虚继承的是()。

A.virtualpublicB.publicvirtual

C.public√D.virtual

43.下列关于动态联编的描述中,错误的是()。

A.动态联编是以虚函数为基础

B.动态联编是运行时确定所调用的函数代码的

C.动态联编调用函数操作是指向对象的指针或对象引用

D.动态联编是在编译时确定操作函数的√

44.下面4个选项中,()是用来声明虚函数的。

A.virtual√B.publicC.usingD.false

45.编译时的多态性可以通过使用()获得。

A

 A.虚函数和指针√B.重载函数和析构函数

C.虚函数和对象D.虚函数和引用

二填空题(共33题)

1.重载插入运算符<<时,其运算符函数的返回值类型应当是ostream&。

2.派生类可以定义其基类中不具备的数据和操作。

3.对象将其大部分实现细节隐藏起来,这种机制称为封闭。

4.建立类和类的对象时,系统对类不分配内存,系统对对象分配内存。

5.基类和派生类的关系称为继承和派生。

6.当保护继承时,基类的公有或保护成员在派生类中成为保护成员,派生类对象不能直接访问基类的任何成员。

7.C++支持两种多态性:

编译时的多态性(重载)和运行时的多态性(虚函数)。

8.在C++中定义类时,通常是利用变量描述对象的“特征”;利用函数描述对象的“行为”。

9.假定用户为类AB定义了一个构造函数"AB(intaa,char*bb=NULL):

a(aa),b(bb){}”,则该类中至少包含有2个数据成员。

10.类是对象的抽象 ;而对象则是类的具体实例。

11.如果不做特殊说明,类成员的默认访问权限是私有;结构成员的默认访问权限是公有。

12.在定义对象的同时初始化其成员变量,需要利用构造函数,用于初始化变量的值可以是固定的常量,也可以通过参数获得。

13.在私有继承关系下,基类的公有成员和保护成员将成为派生类中的私有成员,它们只能由派生类的成员函数来访问;基类的私有成员将成为派生类中的不可访问的成员。

14.在保护继承中,基类中的公有成员、保护成员是可见的。

15.面向对象方法构造的系统,其基本单位是对象。

16.生成一个派生类对象时,先调用基类的构造函数,然后调用派生类的构造函数。

17.AAoperator+(AAx)表示为运算符+重载。

18.若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上类名和两个冒号分隔符。

19.若采用x.abc(y)表达式调用一个成员函数,在成员函数中使用的*this就代表了类外的x对象。

20.假定用户没有给一个名为AB的类定义析构函数,则系统为其定义的析构函数为~AB(){}。

21.类的成员按访问权限可分为三类:

公有、私有、保护。

22.在一个类中定义复制构造函数的目的,是为了当利用该类的一个对象初始化另一个对象时,能够避免这两个对象的同一指针同时指向同一块地址。

23.假定AB为一个类,则执行“ABa[10];”语句时,系统自动调用该类构造函数的次数为10。

24.假定要把aa定义为AB类中的一个常量整数型数据成员,则定义语句为constintaa;。

25.假定AB为一个类,则该类的复制构造函数的函数头为AB(AB&)。

26.假定AB为一个类,该类中含有一个指向动态数组空间的指针成员pa,则在该类的析构函数中应该包含有一条deletepa语句。

27.静态成员函数只能访问类的静态数据成员,非静态成员函数访问类的非静态数据成员。

28.一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明必须在函数名前加上friend的限定。

29.一个单目运算符作为类的成员函数重载时有0个参数;如果作为友元函数重载,则有1个参数。

30.若多个基类及其派生类中都定义了同名函数成员,要访问相应函数时,就需要在函数名前加上基类名和类区分符。

31.若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以virtual的方式直接继承它。

32.引进虚基类的根本目的是为了消除二义性。

33.在每个成员函数中,隐含的第一个参数的参数名为this指针。

三写出下列程序的运行结果

1.

(1)

#include

structab

{

chara[5];

floatb;

};

voidmain()

{

abx={"Li",89.6};

cout<

}

2.

(2)

#include

structab

{chara;

floatb;

};

voidf(ab&y)

{y.a='W';

y.b=90.5;

}

voidmain()

{

abx={'L',89.5};

f(x);

cout<

}

3.(3)

#include

#include

classA{

chara;

public:

A(char*s){

a=newchar[strlen(s)+1];

strcpy(a,s);

cout<

~A(){delete[]a;

cout<<"Destructor!

"<

};

voidmain()

{Ax("LiMing"); 

A y("Zhang"); }

4.(4)

#include

intn=0;

classA{

inta;

public:

A(intaa=0){a=aa;n++;}

~A(){n--;cout<

voidshow(){cout<

};

voidmain()

{Aa;a.show();

{Ax[2];

x[1].show();

}

a.show();

}

5.(5)

#include

classA

{inta,b;                    

public:

A()

{a=b=0;cout<

A(intaa,intbb)

{a=aa;b=bb;cout<

};

voidmain()

{Ax,y(10,5);}

6.(6)

#include

classBB

{inta,b;

public:

BB(inti=0,intj=1){a=i;b=j;}

BBoperator+(BBc)

{BBd;

d.a=a+c.a*10;d.b=b+c.b*10;

returnd;}

BBoperator-(BBc)

{BBd;

d.a=a*c.a;d.b=b*c.b;

returnd;}

voidshow()

{cout<<'('<

};

voidmain()

{BBx(2,6),y(5,5),z;

z=x+y;z.show();

z=x-y;z.show();

}

7.(7)

#include

classEX

{intx,y;

public:

EX(inti=0,intj=1){x=i;y=j;}

EXoperator*(EXz)

{EXd;

d.x=x*z.x;d.y=y*z.y;

returnd;}

EXoperator/(EXc)

{EXd;

d.x=x-c.x;d.y=y-c.y;

returnd;}

voidshow()

{cout<<'('<

};

voidmain()

{EXa(30,10),b(2,5),c;

c=a*b;

c.show();

c=a/b;

c.show();

}

8.(8)

#include

classPoint{

intx,y;

public:

Point(){x=1;y=1;}

~Point(){cout<<"Point"<

};

voidmain()

{

Pointa;

}

9.(9)

#include

#include

intcount=0;

classPoint

{intx,y;

public:

Point(){x=1;y=1;count++;}

~Point(){count--;}

};

voiddisplay()

{

cout<<"Thereare"<

}

voidmain()

{Pointa;

display();

{Pointb[5];display();}

display();

}

10.(10)

#include

classEX1

{inta,b;                    

public:

EX1()

{a=b=1;cout<

EX1(intaa,intbb=100)

{a=aa;b=bb;cout<

};

voidmain()

{

EX1x,y(10,2);

EX1z(200);}

11.(11)

#include

#include

classCsample

{inti;

public:

Csample()

{cout<<"constructor1"<

Csample(intval)

{cout<<"Constructor2"<

voidDisplay()

{cout<<"i="<

~Csample()

{cout<<"Destructor"<

};

voidmain()

{

Csamplea,b(10);

a.Display();

b.Display();

}

12.(12)

#include

classCsample

{

private:

inti;

staticintk;

public:

Csample();

voidDisplay();

};

intCsample:

:

k=0;

Csample:

:

Csample()

{

i=0;

k++;

}

voidCsample:

:

Display()

{

cout<<"i="<

}

voidmain()

{

Csamplea,b;

a.Display();

b.Display();

}

13.(13)

#include

#include

structA

{

charc[20];floatf;};

voidf(A&t)

{

strcpy(t.c,”MALIANG”);

t.f=70.5;}

voidmain()

{Az={“LIMING”,77.5};

f(z);

cout<

}

14.(14)

#include

classCsample

{

inti;

public:

Csample();

voidDisplay();

~Csample();

};

Csample:

:

Csample()

{cout<<"Constructor"<<",";i=0;}

voidCsample:

:

Display()

{cout<<"i="<

Csample:

:

~Csample()

{cout<<"Destructor"<

voidmain()

{Csamplea;

a.Display();

}

15.(15)

#include

classbase

{public:

voidshow(){cout<<"调用基类函数show().\n";}

};

classderived:

publicbase

{public:

voidshow(){cout<<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1