C++继承与派生类习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.一个派生类可以作为另一个派生类的基类