有三个关键字可以用作访问说明符。这些将在说明符之后限制对类成员的访问,直到另一个说明符再次更改访问级别:
关键词 | 描述 |
---|---|
public | 每个人都可以访问 |
protected | 只有课程本身,派生课程和朋友才能访问 |
private | 只有课程本身和朋友可以访问 |
使用class关键字定义类型时,默认访问说明为private,但是如果使用struct关键字定义类型,则默认访问说明为public:
struct MyStruct { int x; }; class MyClass { int x; }; MyStruct s; s.x = 9; // 格式正确,因为x是公开的 MyClass c; c.x = 9; // 格式错误,因为x是私有的
访问说明符通常用于限制对内部字段和方法的访问,并迫使程序员使用特定的接口,例如,强制使用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关键字也可以用于授予或限制访问的基类的子对象。请参见继承示例。