public成员可被类内外及派生类访问,适用于接口函数;2. private成员仅类内部访问,实现数据隐藏;3. protected成员类内和派生类可访问,用于继承控制。
在C++中,public、private 和 protected 是类的访问控制修饰符,用于限制类成员(变量和函数)的访问权限。它们决定了哪些代码可以访问这些成员,是实现封装和数据隐藏的关键机制。
public 成员:完全公开访问
被声明为 public 的成员可以在任何地方被访问:
- 类内部可以访问
- 类外部通过对象直接访问
- 派生类(子类)也可以访问
适用于那些需要对外提供接口的成员函数或常量。
示例:
class MyClass { public: int value; void display() { cout << value; } }; MyClass obj; obj.value = 10; // 合法 obj.display(); // 合法
private 成员:仅类内部可访问
private 成员只能在定义它的类内部访问:
立即学习“C++免费学习笔记(深入)”;
- 类成员函数可以访问 private 成员
- 类外部无法通过对象访问
- 派生类也无法访问
这是默认的访问级别,适合用于隐藏实现细节,防止外部误操作。
示例:
class MyClass { private: int secret; public: void setSecret(int s) { secret = s; } // 可以访问 }; MyClass obj; // obj.secret = 100; // 错误!不能从外部访问 obj.setSecret(100); // 正确,通过 public 函数间接访问
protected 成员:类内和派生类可访问
protected 成员的访问权限介于 public 和 private 之间:
- 类内部可以访问
- 派生类可以访问
- 但类外部无法通过对象直接访问
通常用于基类中希望被继承但不对外公开的成员。
示例:
class Base { protected: int protectedData; }; class Derived : public Base { public: void setData() { protectedData = 50; } // 合法,派生类可访问 }; Derived d; // d.protectedData = 50; // 错误!外部不能访问
继承中的访问控制变化
当一个类继承另一个类时,基类成员的访问级别会根据继承方式发生变化:
- public 继承:基类的 public 成员在派生类中仍是 public,protected 保持 protected,private 不可访问
- protected 继承:基类的 public 和 protected 成员都变为 protected
- private 继承:所有基类的 public 和 protected 成员都变为 private
注意:无论哪种继承方式,基类的 private 成员都无法被派生类直接访问。
基本上就这些。理解这三种访问控制符的区别,有助于写出更安全、结构更清晰的面向对象代码。关键是根据设计意图选择合适的修饰符:对外接口用 public,内部实现用 private,需要被继承但不公开的用 protected。