C++习题3继承和多态.docx
- 文档编号:881352
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:11
- 大小:21.17KB
C++习题3继承和多态.docx
《C++习题3继承和多态.docx》由会员分享,可在线阅读,更多相关《C++习题3继承和多态.docx(11页珍藏版)》请在冰豆网上搜索。
C++习题3继承和多态
习题3
一、选择题
1.在C++中,类与类之间的继承关系具有(C)
A)自反性B)对称性C)传递性D)反对称性
2.在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(B)
A)受限制B)保持不变C)受保护D)不受保护
3.按解释中的要求在下列程序划线处填入的正确语句是:
(C)
#include
classBase{
public:
voidfun(){cout<<"Base:
:
fun"< }; classDerived: publicBase{ public: voidfun() {//在此空格处调用基类的函数fun() cout<<"Derived: : fun"< }; A)fun();B)Base.fun();C)Base: : fun();D)Base->fun(); 4.在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(C) A)受限制B)保持不变C)受保护D)不受保护 5.在哪种派生方式中,派生类可以访问基类中的protected成员(B) A)public和privateB)public、protected和private C)protected和privateD)仅protected 6.当一个派生类仅有protected继承一个基类时,基类中的所有公有成员成为派生类的(C) A)public成员B)private成员C)protected成员D)友元 7.不论派生类以何种方法继承基类,都不能使用基类的(B) A)public成员B)private成员C)protected成员D)public成员和protected成员 8下面叙述错误的是(S)。 A)基类的protected成员在派生类中仍然是protected的 B)基类的protected成员在public派生类中仍然是protected的 C)基类的protected成员在private派生类中是private的 D)基类的protected成员不能被派生类的对象访问 9.下列说法中错误的是(S)。 A)保护继承时基类中的public成员在派生类中仍是public的 B)公有继承时基类中的private成员在派生类中仍是private的 C)私有继承时基类中的public成员在派生类中是private的 D)保护继承时基类中的public成员在派生类中是protected的 10下面叙述错误的是(C)。 A)派生类可以使用private派生 B)对基类成员的访问必须是无二义性的 C)基类成员的访问能力在派生类中维持不变 D)赋值兼容规则也适用于多继承的组合 11派生类的构造函数的成员初始化列表中,不能包含(C)。 A)基类的构造函数B)派生类中子对象的初始化 C)基类中子对象的初始化D)派生类中一般数据成员的初始化 12.下列虚基类的声明中,正确的是: (B) A)classvirtualB: publicAB)classB: virtualpublicA C)classB: publicAvirtualD)virtualclassB: publicA 13..实现运行时的多态性采用(D) A)重载函数B)构造函数C)析构函数D)虚函数 14.若一个类中含有纯虚函数,则该类称为(D) A)基类B)纯基类C)派生类D)抽象类 15.假设A为抽象类,下列声明(B)是正确的 A)Afun(int);B)A*p;C)intfun(A);D)AObj; 16.在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值(B) A)不同B)相同C)相容D)部分相同 17.下面函数原型声明中,(C)声明了fun为普通虚函数 A)voidfun()=0;B)virtualvoidfun()=0; C)virtualvoidfun();D)virtualvoidfun(){}; 18.在下面四个选项中,(A)是用来声明虚函数的。 A)virtualB)publicC)usingD)false 19.实现运行时的多态性要使用(D)。 A)重载函数B)构造函数 C)析构函数D)虚函数 20.关于虚函数的描述中,正确的是(D)。 A)虚函数是一个静态成员函数 B)虚函数是一个非成员函数 C)虚函数既可以在函数说明时定义,也可以在函数实现时定义 D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 二、填空题: 1.派生类对基类的继承有三种方式: _public___、_protected___和__private___。 2.如果类Alpha继承了类Beta,则类Alpha称为__派生__类,类Beta称为__基_类。 3.设置虚基类的目的是为了消除二义性,可通过_virtual标识虚基类。 4.类继承中,缺省的继承方式是__private_________。 5.当用protected继承从基类派生→个类时,基类的public成员成为派生类的_protected__________成员,protected成员成为派生类的_protected________成员。 6.指向基类的对象的指针变量也可以指向__公有派生类的对象。 三、程序题 1.继承的工作方式,完成以下代码。 要求: (1)处继承方式为共有继承public, (2)处填写基类的ai,(3)处填写派生类的bi,(4)对象b的数据成员有哪些? ai,bi #include #include classA{ public: A(){ai=1;} protected: intai; }; classB: _____A{ public: B(){bi=2;} voiddisplay(){cout<<____ (2)____<<____(3)____< private: intbi; }; intmain() { Bb; b.display(); } 2.派生类的构造。 派生类的构造总是由基类的初始化开始的。 填写代码,完成基类的初始化。 并且要求屏幕输出效果是: #include classA{ public: A(inti){x=i;cout<<"CA: "< ~A(){cout<<"DA"< private: intx; }; classB: publicA{ public: B(): _A(90)_{y=0;cout<<"CB"< ~B(){cout<<"DB"< private: inty; }; intmain() { Bb; } 3.填写初始化列表,完成以下程序,使得屏幕输出: #include classA{ public: A(inti){x=i;cout< private: intx; }; classD{ public: D(inti){m=i;cout< private: intm; }; classB: publicA{ public: B(): _A(90),d(19) {y=0;} private: inty; Dd; }; intmain() { Bb; } 4.请问以下程序输出什么? #include classA{ public: A(inti){x=i;} intx; }; classB: publicA{ public: B(inti): A(i+1){y=i;} inty; }; voidf1(A&ra) { cout< } voidf2(A*pa) { cout< } intmain() { Bb(3); f1(b); f2(&b); } 4答案: 5.请问以下程序输出什么? #include classA{ public: voiddisplay(){cout<<"A"< }; classB: publicA{ public: voiddisplay(){cout<<"B"< }; voidf(A&r) { r.display(); } intmain() { Bb; f(b); Aa; f(a); } 5.答案: 6.多态性,虚函数。 请问以下程序输出什么? #include classA{ public: virtualvoiddisplay(){cout<<"A"< }; classB: publicA{ public: virtualvoiddisplay(){cout<<"B"< }; voidf(A&r) { r.display(); } intmain() { Bb; f(b); Aa; f(a); } 6.答案: 7.请问以下程序输出什么? #include classA{ public: virtualvoiddisplay(){cout<<"A"< }; classB: publicA{ public: virtualvoiddisplay(){cout<<"B"< }; classC: publicA{ public: virtualvoiddisplay(){cout<<"C"< }; intmain() { Aa,aa; Bb; Cc,cc,ccc; A*pa[6]={&a,&aa,&b,&c,&cc,&ccc}; inti=0; for(i=0;i<6;++i) pa[i]->display(); } 答案: 8.以下程序的屏幕输出是: 。 为何以下程序的屏幕输出中会输出DA呢? 请说明。 #include classA{ public: ~A(){cout<<"DA";} }; classB: publicA{ public: ~B(){cout<<"DB";} }; intmain() { Bb; } 答案: 定义类B对象b时,先调用基类A的构造函数,再调用派生类类B的构造函数。 析构时正好相反,先析构B类,再析构A类。 1答案: (1)public (2)ai(3)bi(4)ai、bi 2.答案: A(90)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 习题 继承