CUJ 2003 July (mostly) private --herb sutter
这位老哥是个牛人,还留着小胡子。他的文章拜读一下也是好的。
就C++ 而言,类的私有部分真的是私有化了么?本文演示了private部分的代码本来是不能被外部的非友员代码访问的,但是在某些情况下可能不是这样。
The Basic Story: Accessibility
像public和protected一样,private也是访问控制符。
The Other Story: Visibility
private能控制访问,和访问相关的是可见性。
一个成员函数返回private函数的指针,这样外部还是能够调用内部的私有函数。
// Example 5: Granting access
//
class Calc;
typedef int (Calc::*PMember)(int);
class Calc {
public:
PMember CoughItUp() { return &Calc::Twice; }
private:
int Twice( int i );
};
int main() {
Calc c;
PMember p = c.CoughItUp(); // yields access to Twice(int)
return (c.*p)( 21 ); // ok
}
总结private的特点如下:
1)私有成员对于成员函数和友员函数是可以访问的。通过函数指针,成员函数可以把私有函数的访问权泄露给其它的函数。
2)私有成员的对于能看到类定义的代码都是可见的。私有成员的参数类型必须要定义,而且私有成员参与名称查找和重载的解析,即使不可以被访问也能造成编译失败。
posted on 2004-10-12 12:28 命中注定宝剑会发出嘟嘟嘟的讯号 阅读(110) 评论(0) 收藏 举报
浙公网安备 33010602011771号