继承与派生类(我改的)

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

第九章继承与派生类

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

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

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

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

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

例题2:派生类的对象对它的哪一类基类成员是可以访问的?( A )

A.公有继承的基类的公有成员 B. 公有继承的基类的保护成员

C. 公有继承的基类的私有成员

D. 保护继承的基类的公有成员

例题3:关于多继承二义性的描述,( D )是错误的。

A.派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B.一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性

C.解决二义性最常用的方法是作用域运算符对成员进行限定

D.派生类和它的基类中出现同名函数时,将可能出现二义性

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

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

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

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

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

例题6:设有基类定义:

class Cbase

{ private: int a;

protected: int b;

public: int c;

};

派生类采用何种继承方式可以使成员变量b成为自己的私有成员( A )

A. 私有继承

B.保护继承

C. 公有继承

D.私有、保护、公有均可

例题7:C++将类继承分为单继承和多继承两种。

例题8:派生类可以定义其___ 基类____中不具备的数据和操作。

例题9:派生类构造函数的初始化列表中包含___初始化基类数据成员、新增内嵌对象数据及新增一般成员数据所需要的全部参数。

例题10:在继承机制下,当对象消亡时,编译系统先执行派生类的析构函数,然后才执行派生类中子对象类的析构函数,最后执行基类的析构函数。

例题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中具有的成员。

私有成员: c1、b2、b3、A2、A3

保护成员: c2

公有成员: c3

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

#include

class Point

{ int x,y;

public:

Point(int a=0,int b=0) {x=a; y=b;}

void move(int xoffset,int yoffset) {x+=xoffset; y+=yoffset;}

int getx() {return x;}

int gety() {return y;}

};

class Rectangle:protected Point

{ int length,width;

public:

Rectangle(int x,int y,int l,int w):Point(x,y)

{ length=l;width=w;}

int getlength(){return length;}

int getwidth(){return width;}

};

void main()

{ Rectangle r(0,0,8,4);

r.move(23,56);

cout<

<

}

分析:保护继承方式使基类的public成员在派生类中的访问属性变为protected,所以派生类Rectangle的对象r不能直接访问基类的成员函数move()、getx()和gety()。其改正方法有两种: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:

int x;

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

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

};

class B

{ public:

相关文档
最新文档