一、类的继承
1、在解决问题时,先查看当前现在的类能否解决部分问题,如果可以则把旧的继承后再拓展来缩短解决问题的时间,降低解决问题的难度,继承就是为了让代码能够重复使用。
2、当面临一个复杂问题时,可以先把问题进行分层,每层的类解决一部分问题,然后通过继承进行汇总,最终得到一个解决问题的类。
二、继承的基本语法
1、继承表
一个子类可以继承多个父类,每个类的继承方式可以不同。
class 子类:继承方式 父类1,继承方式 父类2,... //继承表
{
}
2、继承方式
public 公有继承
private 私有继承
protected 保护继承
3、继承方式的影响
父类 内部 子类 外部 友元
public yes yes yes yes
protected yes yes no yes
private yes no no yes
注意:继承方式并不影响父类中的成员在子类的访问的权限,而影响成员到子类中变成什么访问属性。
父类 public继承 protected继承 private继承
public public protecte private
protected protected protected private
private private private private
三、继承的基本特点
1、子类会继承父类的所有成员(公有、私有、保护)。
注意:子类对象完全可以当作父类对象使用,子类对象与父类对象没有本质上的区别。
2、向上和向下的类型转换
子类转换到父类:子类的指针或引用转换成父类的指针或引用,是一种缩小类型的转换,对于编译器来说是安全的(用父类指针或引用指向子类对象)。
父类转换成子类:父类的指针或引用转换成子类的指针可引用,是一种放大类型的转换,对于编译器来说是危险的(用子类指针或引用指向父类对象)。
注意:编译器仅仅是检查指针或引用的数据类型,而对实际引用的目标对象不关心(构成多态的基础)。
3、子类会隐藏父类的同名成员
1、子类依然会继承父类中的同名成员,但是会隐藏父中的同名成员,在子类中并不直接访问父中的成员。
2、可以通过域限制定符访问 obj.Base::成员名
3、可以使用父类的指针或引用来指向子类对象,编译器就会把子类对象当作父类对象来看待,访问的成员就是父类中的。</