81.知道C++中的组合吗?它与继承相比有什么优缺点吗?
81.知道C++中的组合吗?它与继承相比有什么优缺点吗?
一、什么是组合?
组合 = has-a 关系(有一个)
一个类包含另一个类的对象作为成员。
class B {};
class A {
B b; // A has a B → 组合
};
二、什么是继承?
继承 = is-a 关系(是一个)
一个类派生自另一个类,复用父类接口与实现。
class B {};
class A : public B { // A is a B → 继承
};
三、组合的优点
- 耦合度低(修改父类不影响子类)
- 代码更稳定,不会破坏封装
- 可以在运行时动态替换成员对象(多态更灵活)
- 不破坏封装,只能使用公有成员
- 优先推荐原则:多用组合,少用继承
四、组合的缺点
- 不能直接访问父类的保护成员
- 不能重写 / 扩展行为(要转发调用)
- 整体代码会稍微多一点点(转发函数)
五、继承的优点
- 可以直接复用代码 + 扩展接口
- 支持多态、重写
- 结构清晰,适合
is-a关系
六、继承的缺点
- 耦合度高(父类改,子类全受影响)
- 破坏封装性,子类能访问 protected
- 容易过度继承,导致结构臃肿、脆弱
- 不支持运行时动态改变父类
七、一句话总结(面试满分答案)
- 组合是 has-a 关系,耦合低、更安全、更灵活,优先使用。
- 继承是 is-a 关系,耦合高、复用强,但容易造成脆弱基类问题。
- 设计原则:优先组合,少用继承;只有明确 is-a 时才用继承。

浙公网安备 33010602011771号