计算机C++继承与派生类习题

上传人:ali****an 文档编号:110005774 上传时间:2019-10-28 格式:DOC 页数:10 大小:87.50KB
返回 下载 相关 举报
计算机C++继承与派生类习题_第1页
第1页 / 共10页
计算机C++继承与派生类习题_第2页
第2页 / 共10页
计算机C++继承与派生类习题_第3页
第3页 / 共10页
计算机C++继承与派生类习题_第4页
第4页 / 共10页
计算机C++继承与派生类习题_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《计算机C++继承与派生类习题》由会员分享,可在线阅读,更多相关《计算机C++继承与派生类习题(10页珍藏版)》请在金锄头文库上搜索。

1、第九章继承与派生类92 典型例题分析与解答例题1:下列对派生类的描述中,()是错误的。A一个派生类可以作为另一个派生类的基类B派生类至少有一个基类C派生类的成员除了它自己的成员外,还包含了它的基类成员D派生类中继承的基类成员的访问权限到派生类保持不变答案:D分析:一个派生类可以作为另一个派生类的基类。无论是单继承还是多继承,派生类至少有一个基类。派生类的成员除了它自己的成员外,还包含了它的基类成员。派生类中继承的基类成员的访问权限到派生类受继承方式影响的,对于私有继承,基类的public,protected成员在派生类中作为private成员;对于公有继承,基类的public,protecte

2、d成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。例题2:派生类的对象对它的哪一类基类成员是可以访问的?()A公有继承的基类的公有成员B. 公有继承的基类的保护成员C. 公有继承的基类的私有成员D. 保护继承的基类的公有成员答案:A分析:公有继承的基类的公有成员在派生类中保持公有访问权限,所以派生类对象可以访问它;公有继承的基类的保护成员在派生类中保持保护访问权限,所以派生类对象不可以访问它;基类的私有成员不能被派生到派生类中,所以派生类对象不可以访问它;保护继承的基类的公有成员在派生类中变成保护的访问权限,所以派生类对

3、象不可以访问它。例题3:关于多继承二义性的描述,()是错误的。A派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C解决二义性最常用的方法是作用域运算符对成员进行限定D派生类和它的基类中出现同名函数时,将可能出现二义性答案:D分析:出现二义性有两种情况:调用不同基类的相同成员时可能出现二义性;访问共同基类的成员时可能出现二义性。消除二义性的方法是采用作用域运算符。派生类和它的基类中出现同名函数时,不可能出现二义性。例题4:多继承派生类构造函数构造对象时,()被最先调用。A派生类自己的构

4、造函数B虚基类的构造函数C非虚基类的构造函数D派生类中子对象类的构造函数答案:分析:多继承派生类构造函数构造对象时,构造函数的调顺序是:虚基类的构造函数,派生类中子对象类的构造函数,派生类自己的构造函数。例题5:C+类体系中,能被派生类继承的是()。A构造函数B虚函数C析构函数D友元函数答案:分析:C+类体系中,构造函数、析构函数和友元函数是不能被派生类继承的例题6:设有基类定义:class Cbaseprivate: int a;protected: int b;public: int c;派生类采用何种继承方式可以使成员变量b成为自己的私有成员()A.私有继承B.保护继承C.公有继承D.私

5、有、保护、公有均可答案:分析:私有继承时,基类的protected成员在派生类中作为private成员。例题7:C+将类继承分为()和()两种。答案:()单继承()多继承分析:派生类可以只从一个基类中派生,也可以从多个基类中派生。从一个基类中派生的继承方式称为单继承。从多个基类中派生的继承方式称为多继承。例题8:派生类可以定义其_中不具备的数据和操作。答案:基类分析:派生类是从基类派生的,派生类包含了它所有基类的除构造函数、析构函数之外的所有成员,同时还拥有它自己的新成员。例题9:派生类构造函数的初始化列表中包含_。答案:初始化基类数据成员、新增内嵌对象数据及新增一般成员数据所需要的全部参数。

6、例题10:在继承机制下,当对象消亡时,编译系统先执行(1)的析构函数,然后才执行(2)的析构函数,最后执行(3)的析构函数。答案:(1)派生类(2)派生类中子对象类(3)基类分析:派生类的析构函数的执行次序与构造函数正好相反,先调用派生类的析构函数,再调用派生类中子对象类的析构函数,最后调用基类的析构函数。例题11:设有以下类的定义:class Aclass B: protected Aclass C: private BintA1;int b1;int c1;protected:int A2;protected: int b2;protected: int c2;public:int A3;

7、public: int b3;public: int c3;请按访问权限写出派生类C中具有的成员。私有成员:(1)保护成员:(2)公有成员:(3)。答案:(1)c1、b2、b3、A2、A3(2)c2(3)c3分析:类有它自己的私有成员b1、保护成员b2和公有成员有b3,另外类是以保护方式从类中派生出来的,所以类保护成员2和公有成员A3在类中都变成保护类型的;类有自己的私有成员c1、保护成员c2和公有成员有c3,类是以私有方式从B类中派生出来的,所以类中的b2、b3、A2和A3在类中都变成私有的访问方式。例题12:指出并改正下面程序中的错误。#includeclass Pointint x,y;

8、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 Pointint 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()ret

9、urn width;void main() Rectangle r(0,0,8,4);r.move(23,56);coutr.getx(),r.gety(),r.getlength(),r.getwidth()endl;分析:保护继承方式使基类的public成员在派生类中的访问属性变为protected,所以派生类Rectangle的对象r不能直接访问基类的成员函数move()、getx()和gety()。其改正方法有两种:1)将Rectangle的继承方式改为公有继承public;2)在Rectangle类中重定义move(),getx()和gety()函数,覆盖基类的同名函数。void R

10、ectangle:move(int xoffset,int yoffset)Point:move(xoffset,yoffset);void Rectangle:getx()return Point:getx();void Rectangle:gety()return Point:gety();例题13:指出并改正下面程序中的错误。#includeclass A public:int x;A(int a=0) x=a;void display() coutA.x=xendl; ;class B public:int x;B(int a=0) x=a;void display() coutB.x

11、=xendl; ;class C:public A,public Bint y;public:C(int a,int b,int c) :A(a),B(b)y=c;int gety() return y; ;void main() C myc(1,2,3);myc.x=10;myc.display();分析:类A、B中有同名公有数据成员x和同名成员函数display(),在主函数中访问对象myc的数据成员x是无法确定是访问从A中继承的还是从B中继承的x;调用成员函数也是如此,无法确认是调用类A中的还是类B中的,产生二义性。改正方法,可以用作用域区分符加以限定,如改成myc.A:x=10; my

12、c.A:display();或myc.B:x=10; myc.B:display();例题14:看程序写结果#include class Baseint i;public:Base(int n)cout Constucting base class endl;i=n;Base()cout Destructing base class endl;void showi()cout i ,;int Geti()return i;class Derived:public Baseint j;Base aa;public:Derived(int n,int m,int p):Base(m),aa(p)cout Constructing derived class endl;j=n;Derived()cout Destructing derived classendl;void show()Base:showi();cout j, aa.Geti()

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 教育学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号