用effective C++中的话说就是private继承是实现继承。就是class Derivative 想要用class Base的函数接口,但是又不想让别人通过使用Derivative的对象来使用Base的函数接口。这时可以用private继承。或者Base和Derivative根本没有任何逻辑上的联系,单纯的D想要复用一下B的代码,这时就用private 继承。
在一个对象的内存空间中有_vptr指针指向一个虚函数表,表中装有指向虚函数的函数指针,当一个继承了基类的子对象被创建的时候,根据子对象重写基类虚函数的情况构造子对象的虚函数表。若一个基类指针被赋予子类对象,则代码在运行时会根据那个子对象的虚函数表找到被重写了的基类虚函数,再通过寻址操作跳转实现多态,所以动态联编会比静态联编慢很多。在子类对象初始化的时候,子类对象的_vptr先指向父类的虚函数表,并调用父类的构造函数。之后接着调用子类的构造函数,并把_vptr指向子类虚函数表,所以在构造函数中调用虚函数并不会产生多态。