C++编程中的继承、Pimpl 惯用法及优化策略
1. 继承与组合的选择
在 C++ 编程中,许多程序员存在过度使用继承的情况,他们遵循“不继承就不是面向对象”的观念。实际上,继承(包括 IS - A 关系)是一种比 HAS - A 或 USES - A 更强的关系。在管理依赖时,应优先选择组合而非继承,即“使用必要强度的关系,但不要更强”。
例如,有如下代码:
#include "b.h" // class B (has no virtual functions)
class X : public A, private B {
// ...
};
这里 B 是 X 的私有基类且无虚函数。通常,选择私有继承而非组合的唯一原因是访问受保护成员,多数情况下是为了重写虚函数。由于 B 无虚函数,若无特殊需求,X 应使用 B 类型的成员对象,而非将 B 作为基类子对象。这样可以简化头文件,避免不必要的继承。
简化后的头文件代码如下:
// x.h: after removing unnecessary inheritance
#include <iosfwd>
#include "a.h" // class A
class B;
class C;
class E;
class X : public A
{
public:
X( const C& );
B f( int, char* );
C f( int, C );
C&
超级会员免费看
订阅专栏 解锁全文
705

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



