访问说明符

有三个关键字充当访问说明符。这些限制了对说明符后面的类成员的访问,直到另一个说明符再次更改访问级别:

关键词 描述
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 关键字可用于向访问受保护和私有成员的函数或类型添加访问异常。

publicprotectedprivate 关键字也可用于授予或限制对基类子对象的访问。请参见继承示例。