继承
继承的概念
通过一种机制表达类型之间共性和特性的方式,利用已有的数据类型定义新的数据类型,这种机制就是继承
继承的语法
公有继承的特性
①子类对象会继承基类的属性的行为,任何时候子类对象都可以被当做基类类型的对象,通过子类对象可以直接访问基类中的成员,如同是基类对象在访问它们一样。
②子类对象中包含基类的部分可以称为**“基类子对象”**
向上造型
将子类类型的指针或引用转换为基类类型的指针或引用;这种操作性缩小的类型转换,在编译器看来是安全的,可以隐式转换。
向下造型
将基类类型的指针或引用转换为子类类型的指针或引用;这种操作性放大的类型转换,在编译器看来是危险的,不能隐式转化,但是可以显式转换
继承方式和访问控制属性
子类的构造和析构
如果子类构造函数没有显式指明基类部分(基类子对象)的初始化方式,那么编译器将会自动调用基类的无参构造函数来初始化基类子对象。
如果希望以有参的方式来初始化基类部分,那么必须使用初始化列表来显式指明
子类对象的创建过程
分配内存
构造基类子对象(按继承表顺序)
构造成员子对象(按声明顺序)
执行子类构造函数代码
子类的析构函数,无论自己定义的,还是编译器缺省提供,都会自动调用基类的析构函数,完成基类子对象的销毁。
子类对象销毁过程
执行子类析构函数代码
析构成员子对象(按声明逆序)
析构基类子对象(按继承表逆序)
释放内存