C++ 继承方式使用场景(极简版)

1. 公有继承(public

什么时候用?

  • “是一个”(is-a)关系:派生类 基类的一种。
    • 例:class Dog : public Animal(狗是动物)
  • 最常见,90%的继承都用它

2. 保护继承(protected

什么时候用?

  • “实现继承”:只希望派生类能访问基类成员,外部不能访问
    • 例:工具类继承,基类方法仅供派生类内部使用。

3. 私有继承(private

什么时候用?

  • “用…实现”(has-a 的替代方案)
    • 派生类 内部使用 基类功能,但 不暴露接口
    • 例:class Stack : private LinkedList(栈用链表实现,但对外不暴露链表方法)。

4. 多重继承

什么时候用?

  • 组合多个功能:一个类需要 同时具备多个基类特性
    • 例:class Smartphone : public Phone, public Camera(智能手机既是电话又是相机)。
  • ⚠️ 注意:避免基类有同名成员(会冲突)。

5. 虚拟继承(virtual

什么时候用?

  • 解决"钻石继承"问题(一个基类被多次继承)。
    • 例:
      class A {};
      class B : virtual public A {};  // 虚拟继承
      class C : virtual public A {};
      class D : public B, public C {}; // 不会重复继承A
      

6. 纯虚函数 & 抽象类

什么时候用?

  • 强制派生类实现接口
    • 例:
      class Shape {
      public:
          virtual void draw() = 0; // 纯虚函数
      };
      class Circle : public Shape {
      public:
          void draw() override { /* 必须实现 */ }
      };
      
  • 抽象类不能实例化,只能被继承

总结:什么时候用什么?

继承方式典型场景示例
public"是一个"关系(is-a)Dog : public Animal
protected仅派生类可访问基类成员工具类内部继承
private“用…实现”(不暴露基类接口)Stack : private LinkedList
多重继承组合多个功能Smartphone : Phone, Camera
虚拟继承解决钻石继承问题D : B, C(B/C虚拟继承A)
纯虚函数强制派生类实现接口ShapeCircle
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值