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

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

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

公有继承(Public Inheritance):

  1. 访问权限

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

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

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

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

私有继承(Private Inheritance):

  1. 访问权限

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

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

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

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

示例代码:

cpp 复制代码
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;
}
相关推荐
半桶水专家11 小时前
go语言中的结构体嵌入详解
开发语言·后端·golang
在屏幕前出油12 小时前
二、Python面向对象编程基础——理解self
开发语言·python
粉红色回忆12 小时前
用链表实现了简单版本的malloc/free函数
数据结构·c++
阿方索13 小时前
python文件与数据格式化
开发语言·python
写代码的小球14 小时前
C++计算器(学生版)
c++·算法
k***921614 小时前
【C++】继承和多态扩展学习
java·c++·学习
weixin_4407305014 小时前
java结构语句学习
java·开发语言·学习
JIngJaneIL14 小时前
基于java+ vue医院管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
量子联盟14 小时前
功能完整的PHP站点导航管理系统php程序;开源免费下载
开发语言·php
仙俊红14 小时前
在 Java 中,`==` 和 `equals()` 的区别
java·开发语言·jvm