C++语言基础2:访问控制修饰符“public”详细讲解

📅 2026/7/4 3:50:17
C++语言基础2:访问控制修饰符“public”详细讲解
在 C 中“public”是一个访问控制修饰符access specifier用于控制类class或结构体struct中成员变量、函数等的可见性与可访问性。一、基本概念C 提供三种访问控制级别访问修饰符含义public公有成员任何地方都可以访问private私有成员仅类内部可访问友元除外protected保护成员类内部 派生类可访问友元除外✅public是最开放的访问级别常用于定义类的对外接口API。二、public在类中的作用示例 1基本用法例class MyClass { public: int publicVar; // 公有成员变量 void publicFunc() { // 公有成员函数 std::cout Public function\n; } private: int privateVar 42; // 私有成员外部不可访问 }; int main() { MyClass obj; obj.publicVar 100; // ✅ 允许访问公有成员 obj.publicFunc(); // ✅ 允许调用公有函数 // obj.privateVar 200; // ❌ 编译错误private 成员不可访问 }关键点只有public成员能被类的对象直接使用。三、public在继承中的作用当一个类继承另一个类时继承方式public/private/protected会影响基类成员在派生类中的访问权限。示例 2公有继承public inheritance例class Base { public: void basePublic() {} protected: void baseProtected() {} private: void basePrivate() {} }; class Derived : public Base { // 公有继承 public: void test() { basePublic(); // ✅ 可访问public → public baseProtected(); // ✅ 可访问protected → protected // basePrivate(); // ❌ 不可访问private 始终不可见 } }; int main() { Derived d; d.basePublic(); // ✅ 允许公有继承保留了 public 接口 // d.baseProtected(); // ❌ 错误protected 成员不能在类外访问 }公有继承的含义基类的public成员 → 派生类中仍是public基类的protected成员 → 派生类中仍是protected基类的private成员 → 派生类完全不可见这体现了“is-a” 关系如Dogis aAnimal是面向对象设计中最常用的继承方式。四、class与struct的默认访问权限差异关键字默认成员访问权限默认继承方式classprivateprivatestructpublicpublic示例 3struct 默认是 public例struct MyStruct { int x; // 默认是 public void foo(); }; // 等价于 class MyStruct { public: // ← class 需要显式写 public int x; void foo(); }; 这就是为什么 C 中struct常用于简单数据聚合类似 C 语言而class用于封装复杂逻辑。五、为什么需要public—— 封装与接口设计封装原则隐藏实现细节只暴露必要接口。public成员构成类的对外契约contract。用户只需知道如何使用public接口无需关心private实现。例class BankAccount { private: double balance; // 内部状态禁止直接修改 public: void deposit(double amount) { if (amount 0) balance amount; } double getBalance() const { return balance; } };✅ 通过public函数控制对balance的安全访问防止非法操作如负数存款。六、常见误区误区正确理解“public成员越多越好”应尽量减少public成员遵循最小暴露原则“public变量方便调试”调试应通过日志或调试器而非破坏封装“继承时不用写public”若省略如class D : B默认是private继承会隐藏基类接口总结场景public的作用类成员声明标记可被外部直接访问的接口继承语法表示“公有继承”保持基类接口可用性与structstruct默认所有成员为public设计意义实现封装定义清晰的类对外 API一句话记住public 对外公开的“窗口”用户通过它与对象交互其他细节请藏在private里。