C++第四次作业

类的继承与派生


一、定义:

1、保持已有类的特性而构造新类的过程交继承。

2、在已有类的基础上新增自己的特性而产生新类的过程称为派生。

注:继承和派生是同一过程从不同角度看。

二、目的:

1、继承的目的:实现设计与代码的重用。

2、派生的目的:当新问题出现,原有程序无法解决(或完全不能解决)时,需要对原有程序进行改造。

三、使用方式:

1、单继承时:

class派生类名:继承方式  基类名

{

  成员声明;

}

2、多继承时:

class派生类名:继承方式1  基类名1,继承方式2  基类名2,……

{

  成员声明;

}

注:多继承时需要把所有继承方式和基类列出。每一个“继承方式”只用于限制对紧随其后的基类的继承。

四、访问控制:

1、共有三种继承方式:(1)公有继承(2)私有继承(3)保护继承

2、不同继承方式影响主要体现在:

(1)派生类成员对基类成员的访问权限

(2)通过派生类对象对基类成员的访问权限。

3、访问属性:

(1)基类中publicprotected成员的访问属性在派生类保持不变,但基类的private成员不可直接访问

(2)派生类中的成员函数可以直接访问基类中的publicprotected成员,但不能直接访问基类的private成员

(3)通过派生类的对象访问从基类继承的成员,只能访问public成员

 五、例子:

1、公有继承:

(1)基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可直接访问。

(2)派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类中的private成员。

(3)通过派生类的对象访问从基类继承的成员,只能访问public成员。

 

 注:定义一个Point类,用于初始化私有成员x,y,以及执行move函数。


注:定义一个矩形类,回避了构造函数,新增一个初始化函数,对基类的私有成员,通过基类提供的共有接口initPoint,将x,y作为参数去调用initPoint。

 

 注:主函数实现定义Rectangle类的对象,初始化位置,以及移动位置的操作,并进行输出。

 

 

 ***运行结果***


 

2、私有继承:

(1)基类的public和protected成员都以private身份出现在派生类中,但基类的private成员不可直接访问。

(2)派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类中的private成员。

(3)通过派生类的对象访问从基类继承的成员,只能访问public成员。

 

 

 

 注:多定义了个move函数,基类的move函数用私有方式继承过来之后,变成私有的了,在内外不能访问,为了让客户提供公有接口,在Rectangle自己写一个move函数。同样的getX()函数getY()函数。

 

 注:代码都是一样的,差别在于现在调用的函数都是派生类自己定义的函数,没有基类继承过来的函数。


 

 

3、保护继承:是介于公有和私有之间的一种继承方式。

(1)基类的public和protected成员都以protect身份出现在派生类中,但基类的private成员不可直接访问。

(2)派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类中的private成员。

(3)通过派生类的对象不能直接访问从基类继承的任何成员。

protect成员的特点与作用:

(1)对建立其所在类对象的模块来说,它与private成员的性质相同。

(2)对于其派生类来说,它与public成员的性质相同。

(3)即实现了数据隐藏,又方便继承,实现代码的重用。 


五、总结

       共有继承是最常用的,私有和保护继承需慎用。但私有和保护继承在特定的情况下可以达到特殊的效果,但需要一定的程序设计经验多了,面向的问题多了再使用。

 

posted @ 2019-10-13 21:04  R丶f  阅读(242)  评论(0编辑  收藏  举报