roxell

导航

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)    收藏  举报