11、C++编程中的继承、Pimpl 惯用法及优化策略

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&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值