c++中公有继承和私有继承的区别

c++中公有继承和私有继承的区别

在C++中,公有继承(public inheritance)和私有继承(private inheritance)是两种不同的继承方式,它们在访问权限和派生类与基类之间的关系上有所不同。以下是它们的详细说明:

公有继承(Public Inheritance):

  1. 访问权限

    • 基类的公有成员在派生类中保持为公有(public)成员。
    • 基类的受保护成员在派生类中保持为受保护(protected)成员。
    • 基类的私有成员在派生类中不可访问。
  2. 派生类对基类成员的访问

    • 派生类可以直接访问基类的公有和受保护成员。
    • 派生类不能直接访问基类的私有成员。
  3. 派生类对外界的接口

    • 派生类可以将从基类继承的公有成员暴露给外界,因为它们保持为公有成员。
  4. 派生类类型与基类类型的关系

    • 公有继承表示“是一个”关系,即派生类对象可以被视为基类对象,可以用来替代基类对象。

私有继承(Private Inheritance):

  1. 访问权限

    • 基类的所有成员在派生类中都变为私有成员。
    • 基类的公有、受保护和私有成员在派生类中都变为私有成员。
  2. 派生类对基类成员的访问

    • 派生类可以直接访问基类的所有成员,因为它们都变为了私有成员。
  3. 派生类对外界的接口

    • 派生类不能将从基类继承的任何成员暴露给外界,因为它们都变为了私有成员。
  4. 派生类类型与基类类型的关系

    • 私有继承不表示“是一个”关系,派生类对象不能直接替代基类对象,因为对外部来说,派生类对象并不是基类对象。

示例代码:

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

// 公有继承
class DerivedPublic : public Base {
    // DerivedPublic 从 Base 继承了 publicVar 和 protectedVar
    // privateVar 在 DerivedPublic 中不可访问
};

// 私有继承
class DerivedPrivate : private Base {
    // DerivedPrivate 从 Base 继承了 publicVar、protectedVar 和 privateVar
    // 但它们在 DerivedPrivate 中都变为了私有成员
};

int main() {
    DerivedPublic objPublic;
    objPublic.publicVar = 10; // 合法,因为 publicVar 是公有成员
    objPublic.protectedVar = 20; // 合法,因为 protectedVar 是受保护成员

    DerivedPrivate objPrivate;
    objPrivate.publicVar = 10; // 非法,因为 publicVar 在 DerivedPrivate 中是私有成员
    objPrivate.protectedVar = 20; // 非法,因为 protectedVar 在 DerivedPrivate 中是私有成员
    return 0;
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值