可访问性问题
可访问性问题
C++通过Private,protected,public来控制成员的可访问性。
Private 只能被该类的成员或友元使用;
Protected能被该类或者派生类的成员或友元使用;
Public 能被外部访问。
我们知道派生类可对基类的任何同名虚函数进行重写,但是不能调用基类私有虚函数。不过,派生类却可以改变基类虚函数的访问性。
Private成员名字只对所属类的其他成员或友元来说是可访问的,而这里的其他成员也包括成员模板函数的任何显式特化(任何成员模板都可以针对任何类型进行特化,即对特殊的类型使用特殊的内部实现。这个技巧可以用来访问私有成员)。同时。任何对某个成员具有访问性的代码都可以通过泄露该成员的指针的方式将其的访问权限授予外界的任何代码!
Private成员对于任何能够看到其所属类定义的代码来说都是可见的。这意味着它的函数参数必须预先声明,另外任何私有成员都会参与名字查找和重载决议,因此可能会使调用变得无效或具有二义性。