继承概念

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情


继承的概念及定义

继承的概念

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


例如,下面的代码中Student类和Teacher类就继承了Person类。

//父类(基类)
class Person
{
public:
    void Print()
    {
        cout << "name:" << _name << endl;
        cout << "age:" << _age << endl;
    }
protected:
    string _name = "张三"; //姓名
    int _age = 18;     //人的年龄
};
//子类
class Student : public Person
{
protected:
    int _stuid;   //学生的学号
};
//子类
class Teacher : public Person
{
protected:
    int _jobid;   //老师的工号
};

image-20220312221340588

继承后,父类Person的成员函数和成员变量,都会变成子类的一部分,也就是说,子类Student和Teacher复用了父类Person的成员。


继承的定义

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

定义格式:

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

image-20220311211225338

注意:在继承当中,父类也可以称为基类,子类是由基类派生而来的,所以子类又称为派生类。


继承关系和访问限定符

共有3种继承方式,访问限定符也有3种

image-20220311211259918

所以可以组成9种不同的继承和访问限定方式

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

基类(父类)的成员被不同访问限定符修饰,会以不同的继承方式继承到派生类(子类)当中后,该成员最终在派生类(子类)当中的访问方式将会发生变化。

类成员/继承方式 public继承 protected继承 private继承
基类的public成员 派生类的public成员 派生类的protected成员 派生类的private成员
基类的protected成员 派生类的protected成员 派生类的protected成员 派生类的private成员
基类的private成员 在派生类中不可见 在派生类中不可见 在派生类中不可见

得出规律:认为三种访问限定符的权限大小为:public > protected > private ,取二者权限的较小值作为成员的权限

实际上面的表格我们进行一下总结会发现,基类的私有成员(private)在子类都是不可见基类的其他成员在子类 的访问方式 == Min(成员在基类的访问限定符,继承方式) ,public > protected > private

所以我们只需要记住:

  • 父类的私有成员在子类不可见
  • 继承关系和父类访问限定符取Min,就是派生类的成员关系

注意:保护和私有的成员在父类中没有区别,但是在子类中,private成员是不可见的,protected成员是可见的


猜你喜欢

转载自juejin.im/post/7126731474547507231