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 → 继承
};

三、组合的优点

  1. 耦合度低(修改父类不影响子类)
  2. 代码更稳定,不会破坏封装
  3. 可以在运行时动态替换成员对象(多态更灵活)
  4. 不破坏封装,只能使用公有成员
  5. 优先推荐原则:多用组合,少用继承

四、组合的缺点

  1. 不能直接访问父类的保护成员
  2. 不能重写 / 扩展行为(要转发调用)
  3. 整体代码会稍微多一点点(转发函数)

五、继承的优点

  1. 可以直接复用代码 + 扩展接口
  2. 支持多态、重写
  3. 结构清晰,适合 is-a 关系

六、继承的缺点

  1. 耦合度高(父类改,子类全受影响)
  2. 破坏封装性,子类能访问 protected
  3. 容易过度继承,导致结构臃肿、脆弱
  4. 不支持运行时动态改变父类

七、一句话总结(面试满分答案)

  • 组合是 has-a 关系,耦合低、更安全、更灵活,优先使用
  • 继承是 is-a 关系,耦合高、复用强,但容易造成脆弱基类问题
  • 设计原则:优先组合,少用继承;只有明确 is-a 时才用继承。
posted @ 2023-07-11 15:17  CodeMagicianT  阅读(112)  评论(0)    收藏  举报