C++中的继承

在 C++ 中,继承的方式有三种:publicprotected 和 private。它们控制了基类成员在派生类中的访问权限。以下是这三种继承方式的区别:

1. public 继承

  • 基类的 public 成员在派生类中保持 public
  • 基类的 protected 成员在派生类中保持 protected
  • 基类的 private 成员在派生类中不可访问。

这种继承方式表示「is-a」的关系,派生类对象可以当作基类对象使用(比如赋值或传递给函数时可以转换为基类类型),适合用于多态性场景。

示例

struct Base {
    public:
        int publicVar;
    protected:
        int protectedVar;
    private:
        int privateVar;
};

struct Derived : public Base {
    void func() {
        publicVar = 1;     // 可访问
        protectedVar = 2;  // 可访问
        // privateVar = 3; // 不可访问,编译错误
    }
};

2. protected 继承

  • 基类的 public 和 protected 成员在派生类中都变为 protected
  • 基类的 private 成员在派生类中依然不可访问。

这种继承方式通常表示「implemented-in-terms-of」的关系,表示派生类需要使用基类的功能,但不希望外部直接把派生类当作基类使用。

示例

struct Derived : protected Base {
    void func() {
        publicVar = 1;     // 作为 protected 可访问
        protectedVar = 2;  // 可访问
    }
};
  • 在这种继承方式下,即使 publicVar 是基类中的 public 成员,在 Derived 中也只能作为 protected 访问,派生类的对象无法直接访问 publicVar

3. private 继承

  • 基类的 public 和 protected 成员在派生类中都变为 private
  • 基类的 private 成员在派生类中依然不可访问。

这种继承方式表示「is-implemented-in-terms-of」的关系,通常用于派生类仅作为内部实现细节,不希望基类的接口直接暴露在派生类接口中。

示例

struct Derived : private Base {
    void func() {
        publicVar = 1;     // 作为 private 可访问
        protectedVar = 2;  // 可访问
    }
};
  • 在这种继承方式下,基类的 public 和 protected 成员在派生类中都变成 private,外部无法通过派生类对象访问 Base 的 publicVar

总结

  • public 继承:派生类对象可以作为基类对象使用,适合多态。
  • protected 继承:限制外部直接使用基类接口,适合仅内部继承实现。
  • private 继承:更严格地封装了基类的接口,使其仅在派生类内部可用。
posted @ 2024-11-08 23:03  海_纳百川  阅读(5)  评论(0编辑  收藏  举报
本站总访问量