第5章继承与派生docx.docx

上传人:b****4 文档编号:5462750 上传时间:2023-05-08 格式:DOCX 页数:18 大小:17.16KB
下载 相关 举报
第5章继承与派生docx.docx_第1页
第1页 / 共18页
第5章继承与派生docx.docx_第2页
第2页 / 共18页
第5章继承与派生docx.docx_第3页
第3页 / 共18页
第5章继承与派生docx.docx_第4页
第4页 / 共18页
第5章继承与派生docx.docx_第5页
第5页 / 共18页
第5章继承与派生docx.docx_第6页
第6页 / 共18页
第5章继承与派生docx.docx_第7页
第7页 / 共18页
第5章继承与派生docx.docx_第8页
第8页 / 共18页
第5章继承与派生docx.docx_第9页
第9页 / 共18页
第5章继承与派生docx.docx_第10页
第10页 / 共18页
第5章继承与派生docx.docx_第11页
第11页 / 共18页
第5章继承与派生docx.docx_第12页
第12页 / 共18页
第5章继承与派生docx.docx_第13页
第13页 / 共18页
第5章继承与派生docx.docx_第14页
第14页 / 共18页
第5章继承与派生docx.docx_第15页
第15页 / 共18页
第5章继承与派生docx.docx_第16页
第16页 / 共18页
第5章继承与派生docx.docx_第17页
第17页 / 共18页
第5章继承与派生docx.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

第5章继承与派生docx.docx

《第5章继承与派生docx.docx》由会员分享,可在线阅读,更多相关《第5章继承与派生docx.docx(18页珍藏版)》请在冰点文库上搜索。

第5章继承与派生docx.docx

第5章继承与派生docx

 

第5章继承与派生

 

5.1继承与派生的概念

 

图5.1

 

图5.2

 

图5.3

 

图5.4

2

 

5.2派生类的声明方式

 

5.3派生类的构成

数据结构(C++版)

 

图5.5

 

图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.有以下程序结构,请分析访问属性。

classA//A为基类

{public:

 

voidf1();

inti;

 

protected:

voidf2();

 

intj;

 

private:

intk;

 

};

 

classB:

publicA//B为A的公用派生类

C++面向对象程序设计

11

{public:

voidf3();

 

protected:

intm;

 

private:

 

intn;

 

};

 

classC:

publicB

 

//C

 

为B

 

的公用派生类

{public:

voidf4();

 

private:

 

intp;

};

 

intmain()

 

{Aa1;

Bb1;

 

Cc1;

//a1

//b1

 

//c1

是基类A

 

是派生类

 

是派生类

 

的对象

B的对象

C的对象

return0;

 

}问:

(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?

12数据结构(C++版)

 

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

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

f3?

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

{public:

 

voidf1();

protected:

 

voidf2();

private:

 

inti;

 

};

classA

 

classB:

publicA

 

{public:

 

voidf3();

intk;

 

private:

intm;

 

};

 

classC:

protectedB

 

{public:

 

voidf4();

 

protected:

intm;

 

private:

C++面向对象程序设计

13

intn;

};

 

classD:

privateC

 

{public:

 

voidf5();

 

protected:

 

intp;

private:

 

intq;

};

 

intmain()

 

{Aa1;

Bb1;

 

Cc1;

 

Dd1;

 

7.有以下程序,请完成下面工作:

 

①阅读程序,写出运行时输出的结果。

②然后上机运行,验证结果是否正确。

③分析程序执行过程,尤其是调用构造函数的过程。

#include

 

usingnamespacestd;

 

classA

{public:

 

A(){a=0;b=0;}

14

 

A(inti){a=i;b=0;}

A(inti,intj){a=i;b=j;}

数据结构(C++版)

 

voiddisplay(){cout<<″a=″<

inta;

 

intb;

 

};

 

classB:

publicA

 

{public:

B(){c=0;}

 

B(inti):

A(i){c=0;}

 

B(inti,intj):

A(i,j){c=0;}

B(inti,intj,intk):

A(i,j){c=k;}

 

voiddisplay1()

 

{display();

 

cout<<″c=″<

}

 

private:

intc;

 

};

 

intmain()

 

{Bb1;

Bb2

(1);Bb3(1,3);

C++面向对象程序设计

 

Bb4(1,3,5);b1.display1();

b2.display1();

b3.display1();

 

b4.display1();return0;

8.有以下程序,请完成下面工作:

 

①阅读程序,写出运行时输出的结果。

②然后上机运行,验证结果是否正确。

 

③分析程序执行过程,尤其是调用构造函数和析构函数的过程。

usingnamespacestd;

 

classA

 

{public:

A(){cout<<″constructingA″<

 

~A(){cout<<″destructingA″<

};

 

classB:

publicA

 

{public:

B(){cout<<″constructingB″<

~B(){cout<<″destructingB″<

};

 

classC:

publicB

{public:

 

C(){cout<<″constructingC″<

15

 

#include

16

数据结构

(C++版)

~C(){cout<<

″destructingC

″<

};

 

intmain()

{Cc1;

 

return0;

 

9.分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。

要求:

①在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。

②在Teacher类中还包含数据成员title(职称),在

务),在Teacher_Cadre类中还包含数据成员wages(

Cadre类中还包含数据成员工资)。

post(职

③对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。

 

④在类体中声明成员函数,在类外定义成员函数。

⑤在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,

输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。

 

10.将本章5.8节中的程序片段加以补充完善,成为一个完整的程序。

在程序中使用继

承和组合。

在定义

Professor类对象prof1时给出所有数据的初值,然后修改

prof1的生日

数据,最后输出

prof1

的全部最新数据。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2