C++继承与派生类习题Word文档下载推荐.docx

上传人:b****4 文档编号:14407304 上传时间:2022-10-22 格式:DOCX 页数:14 大小:106.65KB
下载 相关 举报
C++继承与派生类习题Word文档下载推荐.docx_第1页
第1页 / 共14页
C++继承与派生类习题Word文档下载推荐.docx_第2页
第2页 / 共14页
C++继承与派生类习题Word文档下载推荐.docx_第3页
第3页 / 共14页
C++继承与派生类习题Word文档下载推荐.docx_第4页
第4页 / 共14页
C++继承与派生类习题Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C++继承与派生类习题Word文档下载推荐.docx

《C++继承与派生类习题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C++继承与派生类习题Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。

C++继承与派生类习题Word文档下载推荐.docx

虚基类的构造函数,派生类中子对象类的构造函数, 

派生类自己的构造函数。

例题5:

C++类体系中,能被派生类继承的是( 

)。

A.构造函数 

B.虚函数 

C.析构函数 

D.友元函数

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

例题6:

设有基类定义:

classCbase

private:

inta;

protected:

intb;

public:

intc;

};

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

A. 

私有继承 

B.保护继承

C. 

公有继承 

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

私有继承时,基类的protected成员在派生类中作为private成员。

例题7:

C++将类继承分为 

(1) 

和 

(2) 

两种。

(1)单继承     (2)多继承

派生类可以只从一个基类中派生,也可以从多个基类中派生。

从一个基类中派生的继承方式称为单继承。

从多个基类中派生的继承方式称为多继承。

例题8:

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

基类

派生类是从基类派生的,派生类包含了它所有基类的除构造函数、析构函数之外的所有成员,同时还拥有它自己的新成员。

例题9:

派生类构造函数的初始化列表中包含____________________________。

初始化基类数据成员、新增内嵌对象数据及新增一般成员数据所需要的全部参数。

例题10:

在继承机制下,当对象消亡时,编译系统先执行 

(1) 

的析构函数,然后才执行 

(2) 

的析构函数,最后执行 

(3) 

的析构函数。

(1)派生类    

(2)派生类中子对象类   (3)基类

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

例题11:

设有以下类的定义:

classA 

classB:

protectedA 

classC:

privateB

int 

A1;

intb1;

intc1;

intA2;

intb2;

intc2;

intA3;

intb3;

intc3;

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

私有成员:

保护成员:

公有成员:

(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<

iostream.h>

classPoint

intx,y;

Point(inta=0,intb=0){x=a;

y=b;

}

voidmove(intxoffset,intyoffset){x+=xoffset;

y+=yoffset;

intgetx(){returnx;

intgety(){returny;

classRectangle:

protectedPoint

intlength,width;

Rectangle(intx,inty,intl,intw):

Point(x,y)

length=l;

width=w;

intgetlength(){returnlength;

intgetwidth(){returnwidth;

voidmain()

{Rectangler(0,0,8,4);

r.move(23,56);

cout<

<

r.getx()<

"

"

r.gety()<

r.getlength()<

r.getwidth()<

endl;

保护继承方式使基类的public成员在派生类中的访问属性变为protected,所以派生类Rectangle的对象r不能直接访问基类的成员函数move()、getx()和gety()。

其改正方法有两种:

1)将Rectangle的继承方式改为公有继承public;

2)在Rectangle类中重定义move(),getx()和gety()函数,覆盖基类的同名函数。

voidRectangle:

:

move(intxoffset,intyoffset){Point:

move(xoffset,yoffset);

getx(){returnPoint:

getx();

gety(){returnPoint:

gety();

例题13:

classA

{public:

intx;

A(inta=0){x=a;

voiddisplay(){cout<

A.x="

x<

}

classB

B(inta=0){x=a;

voiddisplay(){cout<

B.x="

publicA,publicB

inty;

C(inta,intb,intc):

A(a),B(b)

y=c;

intgety(){returny;

{Cmyc(1,2,3);

myc.x=10;

myc.display();

类A、B中有同名公有数据成员x和同名成员函数display(),在主函数中访问对象myc的数据成员x是无法确定是访问从A中继承的还是从B中继承的x;

调用成员函数也是如此,无法确认是调用类A中的还是类B中的,产生二义性。

改正方法,可以用作用域区分符加以限定,如改成myc.A:

x=10;

myc.A:

display();

或myc.B:

myc.B:

display();

例题14:

看程序写结果

#include<

classBase

inti;

Base(intn){cout<

Constuctingbaseclass"

<

endl;

i=n;

~Base(){cout<

Destructingbaseclass"

voidshowi(){cout<

i<

"

;

intGeti(){returni;

classDerived:

publicBase

intj;

Baseaa;

Derived(intn,intm,intp):

Base(m),aa(p){

cout<

Constructingderivedclass"

j=n;

~Derived(){cout<

Destructingderivedclass"

voidshow(){Base:

showi();

j<

aa.Geti()<

{Derivedobj(8,13,24);

obj.show();

说明:

派生类的构造函数的执行次序,先调用基类的构造函数,再调用派生类中子对象类的构造函数,最后调用派生类的构造函数。

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

运行结果:

Constuctingbaseclass

Constructingderivedclass

13,8,24

Destructingderivedclass

Destructingbaseclass

9.3教材习题分析与解答

1.选择题

(1)C++中的类有两种用法:

一种是类的实例化,即生成类对象,并参与系统的运行;

另一种是通过()派生了新的类。

A.复用 

B.继承 

C.封装 

D.引用

B

(2)继承具有( 

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

A)规律性 

B.传递性 

C.重复性 

D.多样性

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

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

B.派生类是基类的子集

C.派生类是基类

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

当前位置:首页 > 法律文书 > 判决书

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

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