[Effective C++笔记]条款39:明智而审慎地使用private继承

书中讲private跟复合(或者叫组合)一样,是“根据某物实现出”,而不是public的“is-a”。当然复合还可以表示“has-a”。

不过书中推荐尽可能使用复合,而只在需要使用基类的protected成员或重新定义virtual函数时才使用private继承。

前者好理解,复合肯定无法使用protected成员;后者的话,我读到时就产生了一个疑问,private继承下的派生类已经无法实现多态,那么重新定义virtual函数有何意义?

随后我想到一种情况确实有用处,比如基类中的其他public或protected函数可能调用这个虚函数,如果使用private基础重新定义了这个虚函数,那么在派生类中调用基类的那些使用了这个虚函数的函数时也能正确定向到重新定义的虚函数上;也即private继承可以复用基类的某种框架。

另外,private与复合相比还有一个好处,就是可以造成empty base最优化。

你可能感兴趣的:(effective)