访问说明符的c ++实现

Ban*_*oot 3 c++ oop

据我了解,C++ 类中的非静态数据成员被打包到 C 风格的结构中。为了简化讨论,忽略虚函数和继承,在这样的方案中如何强制执行访问说明符?

说一个类:

class Object
    {
public:
    int i1;
    int i2;
private:
    char i3;
    int i4;
    };
Run Code Online (Sandbox Code Playgroud)

翻译成:

struct { 
  int i1;
  int i2;
  char i3;
  int i4;
}
Run Code Online (Sandbox Code Playgroud)

如何C ++确保私有成员i3i4不能在类外访问,但i1i2可以吗?

Mat*_* M. 5

C++ 有(一些)安全措施来防止墨菲,而不是马基雅维利。

这意味着const,volatile和 access-qualifiers在编译时被检查,但即使这样也可以绕过(使用各种技巧)。

所以... C++ 不需要实现保护方案。如果程序被编译,它被认为是正确的(写那些限定符)并且将在没有运行时检查的情况下执行。