继承
:public
公有继承
不改变属性
:protected
保护继承
所有变成保护
:private
私有继承
所有变成私有
注意
如果基类的类型是private,在子类中依旧不能使用,private中的成员只能在本类中使用
如果是protect或public,在子类中可以被使用
private继承的子类依旧不能调用
private继承:可以被继承,占用子类空间,但不可被使用
如果派生类中的成员与基类中的成员同名,只会使用自己的(继承的名字遮蔽原则)
如果想用父类的,可以加域解析符::
派生类的构造函数中允许调用基类的构造函数,但仅限于初始化表
继承的构造函数的调用顺序只和继承的顺序有关
命名冲突
解决方法:
1、加上域解析符
2、虚继承
虚继承
使派生类中只留一份间接基类的成员
使用方法:在直接引用前加virtual关键字
向上转型:只能将派生类赋值给基类
多态
一个接口,多种办法(代码的复用性)(一行相同的代码,实现不同的功能)
重写:子类的同名函数,遮蔽父类的同名函数
虚函数
在需要修饰的函数前加virtual
派生类中所有的同名函数自动变为虚函数
构成多态的条件
1、必须存在继承关系
2、继承关系中必须要有同名的虚函数
3、存在基类的指针,通过该指针,调用虚函数
纯虚函数
virtual 函数 =0
1、没有函数体
2、纯粹的函数声明
3、包含纯虚函数的类称为抽象类:无法实例化的类
4、一般作为基类存在,所以又称为模板类
一个类想要实例化,就要将所有继承来的纯虚函数全部重写
tyoeid()
typeid(date Type)
typeid(expression)