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

2362

被折叠的 条评论
为什么被折叠?



