欢迎来到天天文库
浏览记录
ID:6386271
大小:60.50 KB
页数:9页
时间:2018-01-12
《第七章问题继承、虚基类》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、继承、虚基类7.3练习题1.什么是继承性?为什么说它是面向对象程序中的重要机制?2.C十十中继承分为哪两类?继承方式又分哪3种?3.3种继承方式中各有什么特点?不同继承方式中派生类对基类成员的访问有何9.多继承中,在哪些情况下会出现二义性?如何消除二义性?10.为什么要引入虚基类?带有虚基类的派生类的构造函数有什么特点?7.4作业题一、选择填空1.下列对派生类的描述中,()是错的。A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类保持不变2.
2、派生类的对象对它的基类中()是可以访问的。A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D私有继承的公有成员3.对基类和派生类的关系描述中,())是错的。A.派生类是基类的具体化B.派生类是基类的子集C.派生类是基类定义的延续D.派生类是基类的组合4.派生类的构造函数的成员初始值表中,不能包含(A.基类的构造函数B.派生类中子对象的初始化C.基类的子对象初始化D.派生类中一般数据成员的初始化5.关于子类型的描述中,()是错的。A.子类型就是指派生类是基类的子类型B.一种类型当它至少提供了另一种类型的行为,则这种类型是另一种类型的子类型C
3、.在公有继承下,派生类是基类的子类型D.子类型关系是不可逆的6.关于多继承二义性的描述中,()是错的。A.一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性B.解决二义性的最常用的方法是对成员名的限定法C.基类和派生类中同时出现的同名函数,也存在二义性问题D.一个派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性7.设置虚基类的目的是()。A.简化程序B.消除二义性C.提高运行效率D.减少目标代码8.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样
4、将对虚基类的子对象初始化()。A.与虚基类下面的派生类个数有关B.多次C.二次D.一次二、判断下列描述的正确性,对者划√,错者划×1.C++语言中,既允许单继承,又允许多继承。2.派生类是从基类派生出来,它不能再生成新的派生类。3.派生类的继承方式有两种:公有继承和私有继承。4.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。5.在公有继承中,基类中只有公有成员对派生类对象是可见的。6.在私有继承中,基类中只有公有成员对派生类是可见的。7.在私有继承中,基类中所有成员对派生类的对象都是不可见的。8.在保护继承中,对于垂直访问同于公有继承,而对
5、于水平访问同于私有继承。9.派生类是它的基类的组合。10.构造函数可以被继承。11.析构函数不能被继承。12.子类型是不可逆的。13.只要是类M继承了类N,就可以说类M是类N的子类型。14.如果A类型是B类型的子类型,则A类型必然适应于B类型。15.多继承情况下,派生类的构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。16.单继承情况下,派生类中对基类成员的访问也会出现二义性。17.解决多继承情况下出现的二义性的方法之一是使用成员名限定法。18.虚基类是用来解决多继承中公共基类在派生类中只产生一个基类子对象的问题。三、回答下列问题1.根据下面给定
6、的含有虚基类的复杂继承结构,回答问题。ClassA{Public:voidf();};classB:virtualpublicA{Public:voidf();};classC:publicB{};classD:PublicC,virtaulpub1icA{Public:voidg();};(1)画出上述结构的DAG图。(2)设有Dd;间:d.f()是否有二义性?(3)设有VoidD::g(){f();}问:g()函数中对f()调用是否有二义性?2.根据下面给定的继承结构,回答问题。classA{public:inta;intb();intf();intf
7、(int);intg();}classB{public:charf();intg();private:inta:intb();};classC:PublicA,PublicB{};设有:C*pc(1)pc一>a=1;是否有二义性?(2)pc一>b(),是否有二义性?(3)pc一>f();是否有二义性?(4)pc一>f(10);是否有二义性?(5)pc一>g();是否有二义性?提示:二义性检查是在访问控制权限或类型检查之前进行的。四、分析下列程序的输出结果1.#include<iostream.h>classA{public:A(inti,intj){a=i
8、;b=j;}voidMove(intX,inty){a十=X;b十
此文档下载收益归作者所有