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