C++继承与派生类习题.docx
- 文档编号:1492117
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:14
- 大小:106.65KB
C++继承与派生类习题.docx
《C++继承与派生类习题.docx》由会员分享,可在线阅读,更多相关《C++继承与派生类习题.docx(14页珍藏版)》请在冰豆网上搜索。
C++继承与派生类习题
C++继承与派生类习题
第九章继承与派生类
9.2典型例题分析与解答
例题1:
下列对派生类的描述中,( )是错误的。
A. 一个派生类可以作为另一个派生类的基类
B. 派生类至少有一个基类
C. 派生类的成员除了它自己的成员外,还包含了它的基类成员
D. 派生类中继承的基类成员的访问权限到派生类保持不变
答案:
D
分析:
一个派生类可以作为另一个派生类的基类。
无论是单继承还是多继承,派生类至少有一个基类。
派生类的成员除了它自己的成员外,还包含了它的基类成员。
派生类中继承的基类成员的访问权限到派生类受继承方式影响的,对于私有继承,基类的public,protected成员在派生类中作为private成员;对于公有继承,基类的public,protected成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。
分析:
多继承派生类构造函数构造对象时,构造函数的调顺序是:
虚基类的构造函数,派生类中子对象类的构造函数, 派生类自己的构造函数。
例题5:
C++类体系中,能被派生类继承的是( )。
A.构造函数 B.虚函数 C.析构函数 D.友元函数
答案:
B
分析:
C++类体系中,构造函数、析构函数和友元函数是不能被派生类继承的.
例题6:
设有基类定义:
classCbase
{ private:
inta;
protected:
intb;
public:
intc;
};
派生类采用何种继承方式可以使成员变量b成为自己的私有成员( )
A. 私有继承 B.保护继承
C. 公有继承 D.私有、保护、公有均可
答案:
A
分析:
私有继承时,基类的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;
protected:
intA2; protected:
intb2; protected:
intc2;
public:
intA3; public:
intb3; public:
intc3;
}; }; };
请按访问权限写出派生类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
classPoint
{ intx,y;
public:
Point(inta=0,intb=0){x=a;y=b;}
voidmove(intxoffset,intyoffset){x+=xoffset;y+=yoffset;}
intgetx(){returnx;}
intgety(){returny;}
};
classRectangle:
protectedPoint
{ intlength,width;
public:
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< < } 分析: 保护继承方式使基类的public成员在派生类中的访问属性变为protected,所以派生类Rectangle的对象r不能直接访问基类的成员函数move()、getx()和gety()。 其改正方法有两种: 1)将Rectangle的继承方式改为公有继承public;2)在Rectangle类中重定义move(),getx()和gety()函数,覆盖基类的同名函数。 voidRectangle: : move(intxoffset,intyoffset){Point: : move(xoffset,yoffset);} voidRectangle: : getx(){returnPoint: : getx();} voidRectangle: : gety(){returnPoint: : gety();} 例题13: 指出并改正下面程序中的错误。 #include classA {public: intx; A(inta=0){x=a;} voiddisplay(){cout<<"A.x="< }; classB {public: intx; B(inta=0){x=a;} voiddisplay(){cout<<"B.x="< }; classC: publicA,publicB { inty; public: C(inta,intb,intc): A(a),B(b) { y=c; } intgety(){returny;} }; voidmain() {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: : x=10;myc.B: : display(); 例题14: 看程序写结果 #include classBase { inti; public: Base(intn){cout<<"Constuctingbaseclass"< ~Base(){cout<<"Destructingbaseclass"< voidshowi(){cout< intGeti(){returni;} }; classDerived: publicBase { intj; Baseaa; public: Derived(intn,intm,intp): Base(m),aa(p){ cout<<"Constructingderivedclass"< j=n; } ~Derived(){cout<<"Destructingderivedclass"< voidshow(){Base: : showi(); cout< }; voidmain() {Derivedobj(8,13,24); obj.show(); } 说明: 派生类的构造函数的执行次序,先调用基类的构造函数,再调用派生类中子对象类的构造函数,最后调用派生类的构造函数。 析构函数的执行次序与构造函数正好相反,先调用派生类的析构函数,再调用派生类中子对象类的析构函数,最后调用基类的析构函数。 运行结果: Constuctingbaseclass Constuctingbaseclass Constructingderivedclass 13,8,24 Destructingderivedclass Destructingbaseclass Destructingbaseclass 9.3教材习题分析与解答 1.选择题 (1)C++中的类有两种用法: 一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。 A.复用 B.继承 C.封装 D.引用 答案: B (2)继承具有( ),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。 A)规律性 B.传递性 C.重复性 D.多样性 答案: B (3)下列对基类和派生类关系的描述中,错误的是( )。 A.派生类是基类的具体化 B.派生类是基类的子集 C.派生类是基类
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 继承 派生 习题