构造是从类层次的最根处开始,而在每一层,首先会调用基类构造函数,然后调用成员对象构造函数。调用析构函数则严格按照构造函数相反的次序。
对于成员对象,构造函数调用的次序完全不受构造函数的初始化表达式表中的次序影响。该次序是由成员对象在类中声明的次序决定的。
在基类中拥有多个重载函数,任何时候在子类中重新定义了基类中的一个重载函数,在子类之中所有其他重载函数则被自动地隐藏了,即无法调用。
继承和静态成员函数:
静态成员函数与非静态成员函数的共同点:
1.它们均可被继承到派生类中。
2.如果我们重新定义了一个静态成员,所有在基类中的其他重载函数会被隐藏。
3.如果我们改变了基类中一个函数的特性,所有使用给函数名字的基类版本都将会被隐藏。然而,静态成员函数不可以是虚函数。
对私有继承成员公有化:
当私有继承时,基类的所有public成员都变成了private。如果希望它们中的任何一个是可视的,只要用派生类的public部分声明它们的名字即可:
using Pet::eat;
using Pet::sleep;
给出一个重载函数的名字将使基类中所有它的重载版本公有化。
继承和组合都允许由已存在的类型创建新类型,两者都是在新类型中嵌入已存在的类型的子对象。然而,如果想重用已存在类型作为新类型的内部实现的话,我们最好用组合;如果想使新的类型和基类的类型相同(类型一样可确保接口一样),则应使用继承。