C ++中私有和受保护关键字的内部机制。它们如何限制成员变量访问。
答案 0 :(得分:2)
对于类对象的内存布局,从给定的访问说明符到下一个,编译器必须将数据成员放在增加的地址。更一般地说,它必须在增加地址的情况下将成员置于相同的访问级别。对于不同访问级别的成员,情况并非如此。
C ++11§9.2/ 14:“分配了具有相同访问控制(第11条)的(非联合)类的非静态数据成员 后来的成员在类对象中有更高的地址。非静态数据的分配顺序 具有不同访问控制的成员未指定。
这是关于运行时效果的唯一(影响),可以说是我所知道的“内部机制”的措辞。
所有其余的,检查,都在编译时。
答案 1 :(得分:0)
我不认为具有不同访问级别的方法/变量之间存在任何运行时差异。这都是在编译时强制执行的。
答案 2 :(得分:0)
我认为Private和Protected都只作为访问说明符。我们只能实现向他人提供数据访问权限。这些访问权限决定编译时间。
大多数使用Private和Protected来实现继承和数据封装。请看下面的例子:
class Base {
private:
int MyPrivateInt;
protected:
int MyProtectedInt;
public:
int MyPublicInt;
}
class Derived : Base
{
public:
int foo1() { return MyPrivateInt;} // Won't compile!
int foo2() { return MyProtectedInt;} // OK
int foo3() { return MyPublicInt;} // OK
};
class Unrelated
{
private:
Base B;
public:
int foo1() { return B.MyPrivateInt;} // Won't compile!
int foo2() { return B.MyProtectedInt;} // Won't compile
int foo3() { return B.MyPublicInt;} // OK
};