深入理解C++中public、protected及private用法

程一诺
程一诺
发布时间:2026-10-14| 6人浏览过
原创

C++通过public、protected和private关键字实现面向对象的封装与继承机制。掌握这三者的区别及其在继承中的权限变化规律,是编写健壮、安全代码的基础。

基本概念与访问规则

在C++类中,访问修饰符决定了成员变量和函数的可见性范围:

  • public(公有):类内外的所有代码均可访问。用于定义类的接口,供外部调用。
  • protected(受保护):仅类内部及派生类可访问,外部代码无法直接操作。主要用于支持继承体系。
  • private(私有):仅类内部成员函数和友元可访问。用于隐藏内部实现细节,防止被意外修改。

以下代码演示了这三个关键字的基本行为:

#include <iostream>
using namespace std;

class A {
public:
    int a;      // 公有成员
    A() { a = 4; }
};

int main() {
    A itema;
    itema.a = 10; // 正确:public成员可在类外访问
    cout << itema.a << endl;
    return 0;
}

若尝试访问protected或private成员,编译器会报错。

继承中的访问属性变化

继承不仅复用代码,还会改变基类成员的访问权限。C++支持三种继承方式:public、protected和private。

第1步:Public继承(最常用)

目的:保持基类接口的开放性。

  • 规则:基类的public在派生类中仍为public,protected变为protected,private保持private(不可见)。
  • 特点:最符合“is-a”关系语义。
class B : public A { ... };

第2步:Protected继承

目的:限制派生类向更外层暴露实现细节。

  • 规则:基类的public和protected均变为protected,private不可见。
  • 特点:通常用于组合模式或需要严格控制派生类对外接口的场景。
class B : protected A { ... };

第3步:Private继承(极少用)

目的:仅复用实现,不保留接口关系(Has-a关系)。

  • 规则:基类的public和protected均变为private。
  • 注意:由于外部无法通过派生类访问基类功能,使用频率极低。
class B : private A { ... };

同名成员的访问与屏蔽

当派生类定义了与基类同名的成员变量时,基类成员会被隐藏(Shadows)。此时在类外或通过派生类对象直接访问该名称,指向的是派生类的成员。

验证内存布局与大小

派生类包含基类的所有成员以及新增成员。例如:

// 假设A包含int a(4字节), 派生类B新增int a(4字节)
// sizeof(A) = 4, sizeof(B) = 8 (简化模型,实际涉及对齐)

显式调用基类成员

若要访问被隐藏的基类同名成员,可使用作用域解析运算符:::

B b(10);
cout << b.a << endl;        // 输出派生类B的a值
cout << b.A::a << endl;     // 输出基类A的a值

这种方式允许你在派生类中重新定义功能的同时,仍能通过特定路径调用基类的原始逻辑。

总结与最佳实践

1. 默认策略:优先使用private数据成员和public接口函数。除非必要,不要将数据设为public。

2. 继承选择:绝大多数情况下使用public继承。只有在需要严格限制派生类接口暴露时,才考虑protected或private继承。

3. 访问检查:编译器的访问检查基于静态类型。在派生类成员函数中,可以访问基类的protected成员,但不能在类外直接通过对象访问基类的protected成员。

以上就是C++中public、protected及private详细用法的详细内容,更多关于C++访问控制权限的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。