面向对象程序设计复习试题(答案) 下载本文

word完美格式

A)class virtual B: public A B)class B: virtual public A

C)class B: public A virtual D)virtual class B: public A

.C++设置虚基类的目的是( A )

A)消除二义性 B)简化程序 C)提高运行效率 D)减少目标代码 class X{ int a; public:

X(int x=0){a=x;} };

class Y:public X{ int b; public :

Y(int x=0,int y=0):X(y)){ b=x;} };

下列语句组中出现语法错误的是(D) A. X *pa=new Y(1,2); B.X a1=Y(1,3); C.Y b1(2,3); X &a3=b1; D.X a4(10);Y b2=a4;

class Base

{ public: int i;

Base(int t) : i ( t ) { } };

class Derived: protected Base { Base b; int j; public:

Derived (int t); };

在构造函数Derived的下列定义中,正确的是(B )

A. Derived : : Derived (int t) : b(t), j(t) { }

B. Derived : : Derived (int t) : b(t), Base(t), j(t) { } C. Derived : : Derived (int t) : Base(t), j(t) { } D. Derived : : Derived (int t) : i(t), b(t), j(t) { }

.在哪种派生方式中,派生类可以访问基类中的protected成员( 精心整理 学习帮手

B )

word完美格式

A)public和private B)public、protected和private C)protected和private D)仅protected

在C++中,类与类之间的继承关系具有(C )

A) 自反性 B) 对称性 C) 传递性 D) 反对称性 下列关于类的继承描述中,(A )是错误的

A) 派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数 B) 派生类也是基类,但基类不一定具有派生类的全部属性和方法 C) 继承描述类的层次关系,派生类可以具有与基类相同的属性和方法 D) 一个基类可以有多个派生类,一个派生类可以有多个基类

.当一个派生类仅有protected继承一个基类时,基类中的所有公有成员成为派生类的(C) A) public成员 B) private成员 C) protected成员 D) 友元 当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( B ) A) public成员 B) private成员 C) protected成员 D) 友元 不论派生类以何种方法继承基类,都不能使用基类的(B )

A) public成员 B) private成员 C) protected成员 D) public成员和protected成员

在创建派生类对象时,构造函数的执行顺序是(D)

A) 对象成员构造函数、基类构造函数、派生类本身的构造函数 B) 派生类本身的构造函数、基类构造函数、对象成员构造函数 C) 基类构造函数、派生类本身的构造函数、对象成员构造函数 D) 基类构造函数、对象成员构造函数、派生类本身的构造函数 下列虚基类的声明中,正确的是( D )。 A)class virtual B:public A B)virtual class B:public A C)class B:public A virtual D)class B:virtual public A 下面叙述错误的是(A )。

A)基类的protected成员在派生类中仍然是protected的

B)基类的protected成员在public派生类中仍然是protected的 C)基类的protected成员在private派生类中是private的 D)基类的protected成员不能被派生类的对象访问 下列说法中错误的是(A )。

A) 保护继承时基类中的public成员在派生类中仍是public的 B)公有继承时基类中的private成员在派生类中仍是private的 C)私有继承时基类中的public成员在派生类中是private的 D)保护继承时基类中的public成员在派生类中是protected的 关于多继承二义性的描述中,错误的是(B )。

A)一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性

B)解决二义性的最常用的方法是对成员名的限定法

C)基类和派生类中同时出现的同名函数,也存在二义性问题

D)一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,可能出现二义性 下面叙述错误的是(C )。

精心整理 学习帮手

word完美格式

A)派生类可以使用private派生

B)对基类成员的访问必须是无二义性的 C)基类成员的访问能力在派生类中维持不变 D)赋值兼容规则也适用于多继承的组合

派生类的构造函数的成员初始化列表中,不能包含(C )。 A)基类的构造函数

B)派生类中子对象的初始化 C)基类中子对象的初始化

D)派生类中一般数据成员的初始化

下面(B )的叙述不符合赋值兼容规则。 A)派生类的对象可以赋值给基类的对象 B)基类的对象可以赋值给派生类的对象 C)派生类的对象可以初始化基类的引用

D)派生类的对象的地址可以赋值给指向基类的指针

.下列虚基类的声明中,正确的是:( B )

A)class virtual B: public A B)class B: virtual public A

C)class B: public A virtual D)virtual class B: public A

.C++设置虚基类的目的是( A )

A)消除二义性 B)简化程序 C)提高运行效率 D)减少目标代码

3.2填空题

1、 垂直访问时,保护成员的访问控制权限与_公有__成员相同。

2、 利用继承能够实现_代码复用__。这种实现缩短了程序的开发时间,促使开发人员复用已经测试和调试好的高质量软件。

3、 派生类对基类的继承有三种方式:__public__、___protected__ 和___private__。 4、 多继承情况下,派生类的构造函数的执行顺序取决于__定义__派生类时所指定的各基类的顺序。

5、 C++提供的_多继承__机制允许一个派生类继承多个基类,即使这些基类是相互无关的。 6、 派生类可以调用其_定义___中不具备的数据和操作。

7、 对基类数据成员的初始化必须在派生类构造函数中的__初始化列表___处执行。

8、 如果类Alpha继承了类Beta,则类Alpha称为__派生__类,类Beta称为__基__类。 9、 己知下面的程序框架,按注释中的提示补充细节。 #include class planet {

protected:

double distance;___//行星距太阳的距离 int revolve;___//行星的公转周期 public:

planet(double d,int r)

精心整理 学习帮手

word完美格式

{

distance=d; revolve=r; } };

class earth:public planet {

double circumference; //地球绕太阳公转的轨道周长 public:

//定义构造函数earth(double d,int r),并计算地球绕太阳公转的轨道周长。 //假定:circumnference=2*d*3.1416

___ earth(double d,int r): planet (d, r){__ circumnference=2*d*3.1416;}___ //定义show()函数显示所有信息

___void show() { cout<<”distance is ”<< distance<<”miles, revolve is”<< revolve<<”days”<

void main() {

earth ob(9300000,365); ob.show(); }

10、 设置虚基类的目的是__为了消除二义性__,可通过____virtual_____标识虚基类。 11、 若多继承时,多个基类中拥有一个同名的成员,则__不能__用调整访问权限确定对该成员的访问。

12、 根据基类的定义和测试程序,完成下面派生类的定义。 Class Point {

public:

Point(int I=0,int j=0){X=I;Y=j;}

void Move(int xOff,int yOff){X+=xOff;Y+=yOff;} int GetX(){return X;} int GetY(){return Y;} private: int X,Y; };

class Rectangle :private Point {

public:

Rectangle(int x,int y,int w,int h)__:Point(x,y)___{_W = w ; H = h ;_ } void Move(int xOff,int yOff){_ Point:Move(xOff, yOff);__ } int GetX(){__return Point:GetX();__ } int GetY(){___return Point:GetY();__ } int GetW(){__return W;__ } int GetH(){__return H;__ }

精心整理 学习帮手