√ 3.单重继承是指派生类只有一个基类的情况。 √ 4.派生类还可以作基类派生出新的派生类。
√ 5.派生类中成员的访问权限与基类的继承方式有关。
× 6.派生类中只包含直接基类的成员,不包含间接基类的成员。
√ 7.继承反映了类之间“是”的关系,组合反映了类之间“有”的关系。 × 8.基类中成员在派生类中都是可以访问的。
× 9.私有继承中基类的私有成员在派生类中还是私有的。
√ 10.保护继承方式下基类的保护成员在派生类仍是保护成员。
× 11.派生类的对象和派生类的派生类对派生类成员的访问权限是一样的。 √ 12.派生类的构造函数包含着直接基类的构造函数。
× 13.派生类的默认构造函数不包含有直接基类的构造函数。 × 14.派生类的析构函数中不包含直接基类的析构函数。 × 15.派生类是基类的子类型。
× 16.如果一个类是另一个类的子类型,则这个类的对象可以给另一个类的对象赋值,反之亦然。
√ 17.多重继承派生类的构造函数中应包含所有直接基类的构造函数。 × 18.多重继承的派生类构造函数中执行基类构造函数的顺序取决于该派生类构造函数的成员初始化列表中出现基类初始化项的顺序。
8.2 单选题
1.下列关于继承的描述中,错误的是( B )。 A.继承是重用性的重要机制
B.C++语言支持单重继承和双重继承 C.继承关系不是可逆的
D.继承是面向对象程序设计语言的重要特性
2.下列关于基类和派生类的描述中,错误的是( C )。 A.一个基类可以生成多个派生类
B.基类中所有成员都是它的派生类的成员 C.基类中成员访问权限继承到派生类中不变
D.派生类中除了继承的基类成员还有自己的成员 3.下列关于派生类的描述中,错误的是( D )。 A.派生类至少有一个基类
B.一个派生类可以作另一个派生类的基类
C.派生类的构造函数中应包含直接基类的构造函数 D.派生类默认的继承方式是public
4.派生类的对象可以直接访问的基类成员是( A )。 A.公有继承的公有成员 B.保护继承的公有成员 C.私有继承的公有成员 D.公有继承的保护成员 5.下列描述中,错误的是( D )。
A.基类的protected成员在public派生类中仍然是protected成员 B.基类的private成员在public派生类中是不可访问的 C.基类public成员在private派生类中是private成员 D.基类public成员在protected派生类中仍是public成员
6.派生类构造函数的成员初始化列表中,不能包含的初始化项是( B )。 A.基类的构造函数 B.基类的子对象 C.派生类的子对象 D.派生类自身的数据成员 7.下列关于子类型的描述中,错误的是( B )。 A.在公有继承下,派生类是基类的子类型
21
B.如果类A是类B的子类型,则类B也是类A的子类型 C.如果类A是类B的子类型,则类A的对象就是类B的对象 D.在公有继承下,派生类对象可以初始化基类的对象引用 8.下列关于多继承二义性的描述中,错误的是( D )。
A.一个派生类的多个基类中出现了同名成员时,派生类对同名成员的访问可能出现二
义性
B.一个派生类有多个基类,而这些基类又有一个共同的基类,派生类访问公共基类成
员时,可能出现二义性
C.解决二义性的方法是采用类名限定
D.基类和派生类中同时出现同名成员时,会产生二义性
8.3 填空题
1.继承的3种方式是 公有 、 私有 和 保护 。
2.如果类A继承了类B,则类A被称为 派生 类,类B被称为 基 类。
3.在保护继承方式下,基类的public成员成为派生类的 保护 成员,基类的protected成员成为派生类的 保护 成员。
4.当一个派生类中含有子对象时,该派生类的析构函数中应包含 直接基类 的析构函数、 子对象类的 析构函数和 自身类 的析构函数。
5.派生类的构造函数的成员初始化列表中可以包含的初始化项有 基类的构造函数 、 子对象类的构造函数 、 常数据成员 和 派生类其他非静态数据成员 。
8.4 分析下列程序的输出结果 1.
#include
public:
A(int i,int j)
{ a1=i;a2=j; } void Move(int x,int y) { a1+=x;a2+=y; } void Print()
{ cout<<'('<
class B:private A {
public:
B(int i,int j,int k,int l):A(i,j) { b1=k;b2=l; } void Print()
{ cout< { A::Print(); } void fun() { Move(5,8); } private: int b1,b2; }; void main() { A a(11,12); a.Print(); B b(31,32,33,34); b.fun(); 22 b.Print(); b.f(); } 答: (11,12) 33.34 (36,40) 2. #include public: void InitA(int i,int j) { a1=i;a2=j; } void Move(int x,int y) { a1+=x;a2+=y; } int Geta1() { return a1; } int Geta2() { return a2; } private: int a1,a2; }; class B:public A { public: void InitB(int i,int j,int k,int l) { InitA(i,j); b1=k; b2=l; } void Move(int x,int y) { b1+=x;b2+=y; } int Getb1() { return b1; } int Getb2() { return b2; } private: int b1,b2; }; class C:public B { public: void fun() { Move(10,15); } }; void main() { C c; c.InitB(11,12,13,14); c.fun(); cout< 答: 11,12,23,29 3. 23 #include { cout<<\ } ~A() { cout<<\ } void Print() { cout< class B:public A { public: B(int i=0,int j=0):A(i),a(j),b(i+j) { cout<<\ } ~B() { cout<<\ } void Print() { A::Print(); cout< B b1(8),b2(12,15); b1.Print(); b2.Print(); } 答: A:constructor called. A:constructor called. B:Constructor called. A:constructor called. A:constructor called. 24 B:Constructor called. 8 8,0 12 27,15 B:Destructor called. A:Destructor called. A:Destructor called. B:Destructor called. A:Destructor called. A:Destructor called. 4. #include { cout<<\ } ~A() { cout<<\ } }; class B { public: B(int i) { cout<<\ } ~B() { cout<<\ } }; class C { public: C(int i) { cout<<\ } ~C() { cout<<\ } }; class D:public A,public B,public C { public: D(int i,int j,int k,int l):A(i),B(j),C(k),a(l) 25 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C++习题与解答(5)在线全文阅读。
相关推荐: