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;
}
相关推荐
C++ 老炮儿的技术栈2 分钟前
分享一个安全的CString
c语言·c++·windows·git·安全·visual studio
桦039 分钟前
[C++复习]:STL
开发语言·c++
前端小咸鱼一条1 小时前
16.迭代器 和 生成器
开发语言·前端·javascript
小陈工1 小时前
2026年3月31日技术资讯洞察:AI智能体安全、异步编程突破与Python运行时演进
开发语言·jvm·数据库·人工智能·python·安全·oracle
苏宸啊2 小时前
rbtree封装map和set
c++
ok_hahaha2 小时前
java从头开始-黑马点评-Redission
java·开发语言
无巧不成书02182 小时前
Java面向对象零基础实战:从Employee类吃透自定义类核心,掌握封装精髓
java·开发语言·java入门·面向对象·自定义类·employee类·java核心技术
跃上青空2 小时前
Java如何优雅的使用fastjson2进行枚举序列化/反序列化,欢迎探讨
java·开发语言
汉克老师2 小时前
GESP2025年6月认证C++三级( 第一部分选择题(1-8))
c++·二进制·原码·补码·gesp三级·gesp3级·八进制、
不想写代码的星星2 小时前
C++ 折叠表达式:“我写递归你写折叠,咱俩代码差十年”
c++