2016-03-28 111 views

回答

0

我不相信在不同访问级别的方法/变量之间有任何运行时差异。这一切都是在编译时执行的。

1

对于类对象的内存布局,从给定的访问说明符开始,直到下一个编译器必须将数据成员放在增加的地址处。更一般地说,它必须使成员具有相同的访问级别,地址不断增加。对于不同访问级别的成员来说,情况并非如此。

C++ 11 9.2节/ 14:

”具有相同的访问控制(第11)(非联合)类的非静态数据成员被分配,以便 以后构件具有类对象内的更高地址。未指定具有不同访问控制的成员的非静态数据分配顺序 。

这是他们唯一(的影响)运行时的效果,这东西可容纳措辞“内部机制”,我所知道的。

所有其余的检查都在编译时。

0

我认为私有和受保护的,都只作为访问说明符。只有我们可以实现向其他人提供数据访问权限。这些访问权限决定编译时间。

大多数使用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 
}; 
相关问题