访问说明符
有三个关键字充当访问说明符。这些限制了对说明符后面的类成员的访问,直到另一个说明符再次更改访问级别:
关键词 | 描述 |
---|---|
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
关键字也可用于授予或限制对基类子对象的访问。请参见继承示例。