从一个类派生出另一个类时,原始类称为基类,继承类则称为派生类.
子类继承父类的属性和方法,而且可以自己再创建新的属性和方法.
继承有三种方式:
public
:公有继承
private
:私有继承
protected
:保护继承
父类的私有属性其实被子类继承了,只是编译器给隐藏起来,我们不能访问.
构造函数
如果父类中没有默认构造函数,子类可以利用初始化列表的方式显示的调用父类的其他构造.
父类先构造,子类再构造,子类析构后,父类再析构.所以子类不会继承父类的构造和析构函数.
重名
子类中与父类重名的属性时,访问时默认是子类的该属性,如果想访问父类的属性需要指明,命名空间Base::mParam
.本质上就是说,该子类继承了父类的该同名属性,该之类有两个不同命名空间而重名的属性.
同名的方法也是如此.
所以,子类和父类拥有同名函数和属性,子类不是覆盖父类的成员,而是继承下来并将其隐藏.想调用父类的方法必须加作用域
静态
静态和非静态继承方式都一样
多继承
一个子类继承多个父类.class A:public B1;public B2
多继承中,两个父类有重名的属性时,要显示的告诉调用哪个父类的属性.
菱形继承的解决
虚基类virtual
用虚基类后,用的同一份数据