访问说明符
有三个关键字充当访问说明符。这些限制了对说明符后面的类成员的访问,直到另一个说明符再次更改访问级别:
| 关键词 | 描述 |
|---|---|
public |
每个人都可以访问 |
protected |
只有类本身,派生类和朋友才能访问 |
private |
只有类本身和朋友才能访问 |
使用 class 关键字定义类型时,默认访问说明符为 private,但如果使用 struct 关键字定义类型,则默认访问说明符为 public:
struct MyStruct { int x; };
class MyClass { int x; };
MyStruct s;
s.x = 9; // well formed, because x is public
MyClass c;
c.x = 9; // ill-formed, because x is private
访问说明符主要用于限制对内部字段和方法的访问,并强制程序员使用特定的接口,例如强制使用 getter 和 setter 而不是直接引用变量:
class MyClass {
public: /* Methods: */
int x() const noexcept { return m_x; }
void setX(int const x) noexcept { m_x = x; }
private: /* Fields: */
int m_x;
};
使用 protected 对于允许类型的某些功能只能被派生类访问是很有用的,例如,在下面的代码中,方法 calculateValue() 只能从派生自基类 Plus2Base 的类访问,例如 FortyTwo:
struct Plus2Base {
int value() noexcept { return calculateValue() + 2; }
protected: /* Methods: */
virtual int calculateValue() noexcept = 0;
};
struct FortyTwo: Plus2Base {
protected: /* Methods: */
int calculateValue() noexcept final override { return 40; }
};
请注意,friend 关键字可用于向访问受保护和私有成员的函数或类型添加访问异常。
public,protected 和 private 关键字也可用于授予或限制对基类子对象的访问。请参见继承示例。