继承(一)—— 继承的定义 + 继承方式 和 访问限定符的关系

继承是一种提升代码的复用性的重要手段,允许我们在原有类的基础上进行扩展。比如Person类和Student类都包含了 eat() 函数,我们可以让Student类继承Person类,这样的话,Student类就可以复用Person类的 eat 函数了。

class Person
{
public:
    void eat();
};

class Student
{
public:
    void eat();
};

目录

一、继承的定义

1、定义格式

2、继承方式 和 访问限定符

(1) public 继承(最常用)

(2) protected 继承

(3) private 继承

 二、protected访问限定符的来源


一、继承的定义

1、定义格式

假设让 Student 类继承 Person 类。继承的一方,我们称为子类或者派生类被继承的一方,我们称为 父类 或者 基类。继承方式有三种(public、protected、private),按照现实的例子,继承上一辈可以选择全部继承,也可以只继承一部分。

2、继承方式 和 访问限定符

继承可以看作是从外部进入父类内部取走需要的东西。既然想要拿东西,那就必然会受到访问限定符的限制,就算你想全部继承,但是访问限定符可能不让你全拿走。

下面我们分别从三种继承方式的角度,访问限定符是如何限制继承的。根据访问权限进行排名有 public > protected > private ,遵守的原则主要有两个:

  • 基类的 private 成员 无论是以何种方式被继承,在派生类中不可见
  • 父类成员被子类继承以后,访问限定符 = min { 成员在基类的访问限定符,继承方式 }

(1) public 继承(最常用)

public成员

访问限定符 = min { 成员在基类的访问限定符,继承方式 } = min { public , public }  = public

protected成员:访问限定符 = min { public ,protected } = protected

private成员:private 成员在子类中不可见(不可见的意思是看不到,也不能被使用)

(2) protected 继承

public成员

访问限定符 = min { 成员在基类的访问限定符,继承方式 } = min { protected , public }  = protected 

protected成员:访问限定符 = min { protected ,protected } = protected

private成员:private 成员在子类中不可见(不可见的意思是看不到,也不能被使用)

(3) private 继承

public成员

访问限定符 = min { 成员在基类的访问限定符,继承方式 } = min { private , public }  = private

protected成员:访问限定符 = min { private ,protected } = private

private成员:private 成员在子类中不可见(不可见的意思是看不到,也不能被使用)

 二、protected访问限定符的来源

private 和 protected 都无法从类外被访问,那么这两者的区别在哪里呢?protected 访问限定符是因继承才出现的

父类有些成员只是一个中间变量,比如下面的_tmp,无需被子类继承;但是有些东西是必要的,可以被子类继承,因此就有了protected 和 private。

  • 从类的角度:private 和 protected 成员无法从外部直接访问
  • 从继承的角度:protected 可以被继承,private 不可被继承(其实是既不可见又不可用)
class Person
{
public:
    void eat();
protected:
    int _age;
private:
    int _tmp;    //中间变量
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值