第5章 继承与派生

  • 格式:doc
  • 大小:629.00 KB
  • 文档页数:16

下载文档原格式

  / 16
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第5章继承与派生5.1继承与派生的概念

图5.1

图5.2

图5.3

图5.4

2

C++面向对象程序设计

图5.5

5.2派生类的声明方式

5.3派生类的构成

图5.6

5.4派生类成员的访问属性

5.4.1公用继承

C++面向对象程序设计 3 5.4.2私有继承

图5.7

5.4.3保护成员和保护继承

图5.8

4

C++面向对象程序设计5.4.4多级派生时的访问属性

图5.9

5.5派生类的构造函数和析构函数5.5.1简单的派生类的构造函数

图5.10

图5.11

5.5.2有子对象的派生类的构造函数

C++面向对象程序设计 5

图5.12

5.5.3多层派生时的构造函数

图5.13

5.5.4派生类构造函数的特殊形式

5.5.5派生类的析构函数

5.6多重继承

5.6.1声明多重继承的方法

5.6.2多重继承派生类的构造函数

5.6.3多重继承引起的二义性问题

6

C++面向对象程序设计

图5.14

图5.15

图5.16

图5.17

图5.18

C++面向对象程序设计7

图5.19

图5. 20

5.6.4虚基类

1. 虚基类的作用

图5.21

8

C++面向对象程序设计

图5.22

图5.23

图5.24

2. 虚基类的初始化

C++面向对象程序设计9

图5.25

3. 虚基类的简单应用举例

5.7基类与派生类的转换

图5.26

图5.27

10

C++面向对象程序设计

5.8继承与组合

5.9继承在软件开发中的重要意义

习题

1. 将例5.1的程序片段补充和改写成一个完整、正确的程序,用公用继承方式。在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。

2. 将例5.2的程序片段补充和改写成一个完整、正确的程序,用私有继承方式。在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。

3. 将例5.3的程序修改、补充,写成一个完整、正确的程序,用保护继承方式。在程序中应包括输入数据的函数。

4. 修改例

5.3的程序,改为用公用继承方式。上机调试程序,使之能正确运行并得到正确的结果。对这两种继承方式作比较分析,考虑在什么情况下二者不能互相代替。

5. 有以下程序结构,请分析访问属性。class A//A为基类

{public:

void f1( );

int i;

protected:

void f2( );

int j;

private:

int k;

};

class B: public A //B为A的公用派生类

{public:

void f3( );

protected:

int m;

private:

int n;

};

class C: public B //C为B的公用派生类

{public:

void f4( );

private:

int p;

};

int main( )

{A a1; //a1是基类A的对象

B b1; //b1是派生类B的对象

C c1; //c1是派生类C的对象

return 0;

}问:

(1) 在main函数中能否用b1.i,b1.j和b1.k引用派生类B对象b1中基类A的成员?

(2) 派生类B中的成员函数能否调用基类A中的成员函数f1和f2?

(3) 派生类B中的成员函数能否引用基类A中的数据成员i,j,k?

(4) 能否在main函数中用c1.i,c1.j,c1.k,c1.m,c1.n,c1.p引用基类A的成员i,j,k,派生类B的成员m,n,以及派生类C的成员p?

(5) 能否在main函数中用c1.f1(),c1.f2(),c1.f3()和c1.f4()调用f1,f2,f3,f4成员函数?

(6) 派生类C的成员函数f4能否调用基类A中的成员函数f1,f2和派生类中的成员函数f3?

6. 有以下程序结构,请分析所有成员在各类的范围内的访问权限。class A

{public:

void f1( );

protected:

void f2( );

private:

int i;

};

class B: public A

{public:

void f3( );

int k;

private:

int m;

};

class C: protected B

{public:

void f4( );

protected:

int m;

private:

相关主题