[C++再学习系列] 可访问性问题

可访问性问题

C++ 通过 Private , protected , public 来控制成员的可访问性。

Private 只能被该类的成员或友元使用;

Protected 能被该类或者派生类的成员或友元使用;

Public 能被外部访问。

 

我们知道派生类可对基类的任何同名虚函数进行重写,但是不能调用基类私有虚函数。不过,派生类却可以改变基类虚函数的访问性 。

 

Private 成员名字只对所属类的其他成员或友元来说是可访问的 ,而这里的其他成员也包括成员模板函数的任何显式特化 (任何成员模板都可以针对任何类型进行特化,即对特殊的类型使用特殊的内部实现。这个技巧可以用来访问私有成员)。同时。任何对某个成员具有访问性的代码都可以通过泄露该成员的指针 的方式将其的访问权限授予外界的任何代码!

Private 成员对于任何能够看到其所属类定义的代码来说都是可见的 。这意味着它的函数参数必须预先声明,另外任何私有成员都会参与名字查找和重载决议 ,因此可能会使调用变得无效或具有二义性。

posted @ 2012-11-13 19:03  szwencan  阅读(148)  评论(0编辑  收藏  举报