C++继承与派生类习题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第九章继承与派生类

9.2 典型例题分析与解答

例题1:下列对派生类的描述中,()是错误的。

A.一个派生类可以作为另一个派生类的基类

B.派生类至少有一个基类

C.派生类的成员除了它自己的成员外,还包含了它的基类成员

D.派生类中继承的基类成员的访问权限到派生类保持不变

答案:D

分析:一个派生类可以作为另一个派生类的基类。无论是单继承还是多继承,派生类至少有

的成员时可能出现二义性。消除二义性的方法是采用作用域运算符。派生类和它的基类中出现同名函数时,不可能出现二义性。

例题4:多继承派生类构造函数构造对象时,()被最先调用。

A.派生类自己的构造函数 B.虚基类的构造函数

C.非虚基类的构造函数D.派生类中子对象类的构造函数

答案:B

分析:多继承派生类构造函数构造对象时,构造函数的调顺序是:虚基类的构造函数,派生类中子对象类的构造函数,派生类自己的构造函数。

例题5:C++类体系中,能被派生类继承的是()。

A.构造函数B.虚函数C.析构函数D.友元函数答案:B

分析:C++类体系中,构造函数、析构函数和友元函数是不能被派生类继承的.

例题6:设有基类定义:

class Cbase

{ private: int a;

protected: int b;

public: int c;

};

用派生类中子对象类的析构函数,最后调用基类的析构函数。

例题11:设有以下类的定义:

class A class B: protected A class C: private B

{ int A1; { int b1; { int c1;

protected: int A2; protected: int b2; protected: int c2;

public: int A3; public: int b3; public: int c3;

}; }; };

请按访问权限写出派生类C中具有的成员。

私有成员: (1)

保护成员: (2)

公有成员: (3) 。

答案:(1)c1、b2、b3、A2、A3 (2)c2 (3)c3

分析:B类有它自己的私有成员b1、保护成员b2和公有成员有b3,另外B类是以保护方式从A类中派生出来的,所以A类保护成员A2和公有成员A3在B类中都变成保护类型的;C类有自己的私有成员c1、保护成员c2和公有成员有c3,C类是以私有方式从B类中派生出来的,所以B类中的b2、b3、A2和A3在C类中都变成私有的访问方式。

例题12:指出并改正下面程序中的错误。

#include

class Point

种:1)将Rectangle的继承方式改为公有继承public;2)在Rectangle类中重定义move(),getx()和gety()函数,覆盖基类的同名函数。

void Rectangle::move(int xoffset,int yoffset){Point::move(xoffset,yoffset);}

void Rectangle::getx(){return Point::getx();}

void Rectangle::gety(){return Point::gety();}

例题13:指出并改正下面程序中的错误。

#include

class A

{ public:

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

void display() { cout<<"A.x="<

};

class B

{ public:

int x;

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

void display() {cout<<"B.x="<

class C:public A,public B

void showi(){cout << i<< ",";}

int Geti(){return i;}

};

class Derived:public Base

{ int j;

Base aa;

public:

Derived(int n,int m,int p):Base(m),aa(p){

cout << "Constructing derived class" <

j=n;

~Derived(){cout <<"Destructing derived class"<

void show(){Base::showi();

cout << j<<"," << aa.Geti() << endl;}

};

void main()

{ Derived obj(8,13,24);

obj.show();

}

说明:派生类的构造函数的执行次序,先调用基类的构造函数,再调用派生类中子对象类的构造函数,最后调用派生类的构造函数。析构函数的执行次序与构造函数正好相反,先调用

D.

多样性

答案:B

(3)下列对基类和派生类关系的描述中,错误的是()。

A.派生类是基类的具体化

B.派生类是基类的子集

C.派生类是基类定义的延续

D.派生类是基类的组合

答案:B

(4)下列对派生类的描述中,错误的是()。

A.一个派生类可以作为另一个派生类的基类

相关文档
最新文档