继承概述
1: has-a模式: 一个对象包含另外的一个对象,那么这个叫做has-a模式,汽车有车轮对象;
2: is-a模式: 比如我们编写了一个猫的对象,后面我们要开发一个猫的特例, 波斯猫;
波斯猫 is a 猫;
3: has-a的模式我们可以通过类包含其他的类来实现;
4: is-a模式: c++有继承机制,来实现;
5: 波斯猫 is a 猫,所以编写波斯猫代码的时候,可以不用再写猫的成员和方法,直接继承。
然后再扩展自己特有的方法;
6: 继承: 子类与父类, 派生类与基类两种说法;
继承语法
1: class 子类 : 继承方式 父类 {
// 定义和扩展子类特有的方法和数据成员;
}; public公有继承:
父类私有的子类不能访问,父类protected,子类也是protected,父类public子类也是public; protected保护继承:
父类私有的子类不能访问,父类protected子与public 子类是protected; private 私有继承:
父类私有的子类不能访问,父类protected子与public 子类是private;
默认不写继承方式,是私有继承,基类的私有类型子类也是不能访问的;
2: 继承的内存布局:
继承包含了父类的部分,并拥有了自己的部分,和包含类似;
3: 继承的子类在实例化的时候: 先构造父类实例,在构造子类实例;
4: 销毁子类实例的时候,先调用子类析构函数, 再调用父类析构函数;
5: 多继承: class 类名: 继承方式 基类1, 继承方式 基类2… {},慎用多继承;
- 猫类
- 波斯猫–>猫
-
class子类 :继承方式 父类 一共有3种继承方式-
public: 共有继承- 如果是父类是私有成员
private,子类是不能够访问的,有但是不能访问; - 如果父类是保护成员
protected,继承过来后也是子类的protected,子类是可以访问的,子类的子类也可以访问,外部不能访问; - 如果父类是共有成员
public,那么子类也是可以访问的,子类继承过来的属性也是public,子类的子类也是可以访问的,外部也是可以访问的;
- 如果是父类是私有成员
-
private: 私有继承- 如果父类是私有成员私有的
private那么子类是不能够访问的,有但是不能访问; - 如果父类的保护成员
protected,继承过来后也是子类的private,子类是可以访问的,子类的子类是不可以访问的,外部也不可以访问;
- 如果父类是私有成员私有的
- 如果父类是共有成员(public),子类继承过来的是private,子类是可以访问的,子类的子类是不可以访问的,外部也不可以访问;
-
-
ptotected: 保护继承- 如果父类是私有的(
private)那么子类是不能够访问的,有但是不能访问; - 如果父类的保护成员(
protected),继承过来的是protected,子类的可以访问的,子类的子类是可以访问的,外部是不可以访问的; - 如果父类是共有成员(
public),子类继承过来的是protected,那么子类也是可以访问,子类的子类也的可以访问,外部是不可以访问的; - 不写继承方式,默认的
private私有的
- 如果父类是私有的(
-
继承的内存布局;
- 包含了父类,并拥有了自己的部分,和包含类似;
- 继承的实例构造过程
- 1> 分配b的内存,(子类部分+父类的部分)
- 2> 调用父类的构造函数,构造一个猫;
- 3> 再调用子类的构造函数;构造成一个波斯猫;
- 继承的实例销毁过程
- 1> 调用子类的析构函数,把子类的扩展部分析构;
- 2> 调用父类的析构函数,把父类的部分析构
- 3> 子类实例的内存回收;
- 多继承:
-
java,c#...很多高级语言都没有多继承。
-
子类访问父类
1: 子类数据成员和成员函数的访问:
(1):先在子类里面查找,如果找到,直接访问;
(2): 再到父类里面查找,如果找到,直接访问;
(3): 再往父类的父类查找,直到整个体系全部找完;
2: 子类成员函数里面调用父类:
显示的调用: this->父类::函数名字;
3: 重载:
如果子类实现了和父类同样的方法(名字相同,参数相同),这个叫做重载;
根据查找关系,首先会找到子类的方法;
- 子类的访问:
- 隐式调用:
- 1> 它会在自己的类里面找,看有没有这个成员;
- 2> 它会在父类里面找,看有没有这个成员;
- 3> 父亲的父亲里面查找,………..直到整个体系找完;
- 显示的调用:
- 重载
- 父类有的函数,子类也有的话,叫重载;
- 函数名和参数要相同
- 根据查找关系,首先会到子类的方法;
- 子类强制重载父类方法
总结
1: 掌握has-a模式与is-a模式;
2: 掌握继承与权限;
3: 掌握成员函数与数据成员在继承体系搜索的过程;
4: 掌握子类调用父类方法;