继承概述

1: has-a模式: 一个对象包含另外的一个对象,那么这个叫做has-a模式,汽车有车轮对象;
2: is-a模式: 比如我们编写了一个猫的对象,后面我们要开发一个猫的特例, 波斯猫;
波斯猫 is a 猫;
3: has-a的模式我们可以通过类包含其他的类来实现;
4: is-a模式: c++有继承机制,来实现;
5: 波斯猫 is a 猫,所以编写波斯猫代码的时候,可以不用再写猫的成员和方法,直接继承。
然后再扩展自己特有的方法;
6: 继承: 子类与父类, 派生类与基类两种说法;
c++ 继承与重载


继承语法

1: class 子类 : 继承方式 父类 {
// 定义和扩展子类特有的方法和数据成员;
};
public公有继承:
父类私有的子类不能访问,父类protected,子类也是protected,父类public子类也是public
protected保护继承:
父类私有的子类不能访问,父类protected子与public 子类是protected;
private 私有继承:
父类私有的子类不能访问,父类protected子与public 子类是private;
默认不写继承方式,是私有继承,基类的私有类型子类也是不能访问的;

2: 继承的内存布局:
继承包含了父类的部分,并拥有了自己的部分,和包含类似;
3: 继承的子类在实例化的时候: 先构造父类实例,在构造子类实例;
4: 销毁子类实例的时候,先调用子类析构函数, 再调用父类析构函数;
5: 多继承: class 类名: 继承方式 基类1, 继承方式 基类2… {},慎用多继承;


  • 猫类
    • c++ 继承与重载
  • 波斯猫–>猫
  • class 子类 :继承方式 父类 一共有3种继承方式
    • public : 共有继承
      • 如果是父类是私有成员private,子类是不能够访问的,有但是不能访问;
      • 如果父类是保护成员protected,继承过来后也是子类的protected,子类是可以访问的,子类的子类也可以访问,外部不能访问;
      • 如果父类是共有成员public,那么子类也是可以访问的,子类继承过来的属性也是public,子类的子类也是可以访问的,外部也是可以访问的;
      • c++ 继承与重载
    • private: 私有继承
      • 如果父类是私有成员私有的private那么子类是不能够访问的,有但是不能访问;
      • 如果父类的保护成员protected,继承过来后也是子类的private,子类是可以访问的,子类的子类是不可以访问的,外部也不可以访问;
    • 如果父类是共有成员(public),子类继承过来的是private,子类是可以访问的,子类的子类是不可以访问的,外部也不可以访问;
    • c++ 继承与重载
  • ptotected : 保护继承

    • 如果父类是私有的(private)那么子类是不能够访问的,有但是不能访问;
    • 如果父类的保护成员(protected),继承过来的是protected,子类的可以访问的,子类的子类是可以访问的,外部是不可以访问的;
    • 如果父类是共有成员(public),子类继承过来的是protected,那么子类也是可以访问,子类的子类也的可以访问,外部是不可以访问的;
    • c++ 继承与重载
    • 不写继承方式,默认的private私有的
      • c++ 继承与重载
  • 继承的内存布局;

    • 包含了父类,并拥有了自己的部分,和包含类似;
    • c++ 继承与重载
  • 继承的实例构造过程
    • 1> 分配b的内存,(子类部分+父类的部分)
    • 2> 调用父类的构造函数,构造一个猫;
    • 3> 再调用子类的构造函数;构造成一个波斯猫;
      • c++ 继承与重载
  • 继承的实例销毁过程
    • 1> 调用子类的析构函数,把子类的扩展部分析构;
    • 2> 调用父类的析构函数,把父类的部分析构
    • 3> 子类实例的内存回收;
      • c++ 继承与重载
  • 多继承:
    • java,c#...很多高级语言都没有多继承。
    • c++ 继承与重载
    • -

子类访问父类

1: 子类数据成员和成员函数的访问:
(1):先在子类里面查找,如果找到,直接访问;
(2): 再到父类里面查找,如果找到,直接访问;
(3): 再往父类的父类查找,直到整个体系全部找完;

2: 子类成员函数里面调用父类:
显示的调用: this->父类::函数名字;

3: 重载:
如果子类实现了和父类同样的方法(名字相同,参数相同),这个叫做重载;
根据查找关系,首先会找到子类的方法;


  • 子类的访问:
    • 隐式调用:
    • 1> 它会在自己的类里面找,看有没有这个成员;
    • 2> 它会在父类里面找,看有没有这个成员;
    • 3> 父亲的父亲里面查找,………..直到整个体系找完;
      • c++ 继承与重载
    • 显示的调用:
      • c++ 继承与重载
  • 重载
    • 父类有的函数,子类也有的话,叫重载;
    • 函数名和参数要相同
    • 根据查找关系,首先会到子类的方法;
    • c++ 继承与重载
    • 子类强制重载父类方法
    • c++ 继承与重载

总结

1: 掌握has-a模式与is-a模式;
2: 掌握继承与权限;
3: 掌握成员函数与数据成员在继承体系搜索的过程;
4: 掌握子类调用父类方法;


–>源代码

相关文章: