【C++ 第十章】继承

1.继承的概念及定义

1.1继承的概念

        继承 (inheritance) 机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。

       继承的本质是复用,比如你需要定义好几个类,但是这几个类有相当一部分的成员都是 重复的,此时就应该想到怎么 复用这一重复的部分,即写一个父类

        

例如:一个外卖平台有 骑手、商家、客户 三种类

这三种类都有 相同的几种成员,显得有点重复


        此时就可以利用 继承,定义一个 父类,骑手、商家、客户 三种类 直接继承 那个基础的类(即父类),实现复用(就和函数复用差不多,当几个函数都有相同的程序步骤,可以直接封装成一个新函数,那几个函数直接复用这个新函数就行,增加可读性,减少代码量)
 


⭐多个类继承同一个父类 只是拷贝新的一份父类的成员变量到子类,父类的成员函数 共用同一个

        因为在一个类对象的存储上来讲,成员函数本来就不属于一个类,而是放到公共代码区,供所有该类的对象复用

1.2 继承定义

1.2.1定义格式

下面我们看到 Person 是父类,也称作基类。Student是子类,也称作派生类。

Student 具有人的基础信息,则定义成父类,直接继承父类就好

// 父类:一个人的基础信息
class Person
{
public:
	Person(){}

	string _name = "peter"; // 姓名

protected:
	int _age = 18; // 年龄
private:
	//父类定义本质,不想被子类继承
	int _tel = 110;
};


// 子类:继承的父类的成员
class Student : public Person
{
protected:
	int _stuid; // 学号:学生类的特殊成员
};


1.2.2 继承关系和访问限定符

继承方式:顾名思义,以什么方式继承一个父类

访问限定符:就是之前讲过的,一个类中设置的 访问限定


1.2.3 继承基类成员访问方式的变化

这个表格的核心点:基类的 private 成员是在 子类中无论以什么继承方式继承, 都是不能被访问的的

注意:只是不能访问这个 private  成员,而不是没有被继承到子类里面

通俗解释:你爸爸继承了家族产业给你,但是你爸还是有自己的私房钱,你可以使用家族产业,但你不能使用 你爸的私房钱(即你是知道有这部分私房钱的,但是你不能使用,就像 子类确实有继承到父类的私有成员,但是不能访问)

那有无方式访问到 父类的 私有成员?

通过调用父类的成员函数,间接的访问 父类的 私有成员


(1)精华总结 相关性质:

1、 基类 private 成员在派生类中无论以什么方式继承都是不可见的。这里的不可见是指基类的私 有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面 都不能去访问它。

2、基类 private 成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在 派生类中能访问,就定义为protected。可以看出保护成员限定符是因继承才出现的

小结:一个基类不想要 外界 和 子类 访问的成员,就写成 private;如果不想要 外界访问,但是允许子类访问,就写成 protected

3、父类的其他成员在子类的访问方式    等价于    Min(成员在基类的访问限定符,继承方式),public > protected > private

即 成员在基类的访问限定符 和  继承方式,取级别小的那个, 因为 private 最小,因此无论 继承方式是什么,最终 子类的对父类成员的访问方式都是 private的

4、使用关键字 class 时默认的继承方式是private,使用 struct 时默认的继承方式是 public,不过 最好显式的写出继承方式。

即可以不显式写 继承方式,class 默认 private,struct 默认 public

class Student : Person // 默认 private 继承
struct Student : Person // 默认 public 继承

5、不同的继承方式有什么意义:若子类 私有 private 的 继承一个 父类,则这个父类的继承下来的所有成员都变成这个子类的 私有成员(包括成员变量);

其他的同理:若子类 公有的 继承一个 父类,则以优先级取小的原则,父类的 公有成员 变成 子类的公有,父类的 保护成员 变成 子类的 保护

6、在实际运用中一般使用都是 public 继承,几乎很少使用 protetced/private 继承,也不提倡 使用protetced/private继承,因为 protetced/private 继承下来的成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值