12.5 友元和static成员

友元

友元是类或者函数,声明于类定义内部,且不受类访问控制影响。

需先定义包含友元的类(定义此类的时候需要先声明授予友元权限的类)。

在使用友元的类中,不必预先声明友元类或函数

友元的声明使得其作用范围扩散的该类定义的外围作用域

比如X类有个Y类的友元,则在X定义的外围作用域中的Z类也可以使用Y而不必声明:

 

 1 class X;
 2 
 3 class Y {
 4     
 5 };
 6 
 7 class X {
 8     friend class Y;
 9     friend void f();
10 };
11 
12 class Z {
13     *p;
14     void g() { ::f(); }
15 };

 

 static

static函数无this形参,不属于某个对象,不能访问非static成员,不能是const函数的和虚函数

在类外部定义static函数或初始化static成员时无需使用"static"关键字

可以通过::操作符直接访问

static数据成员必须在类定义外部定义(否则编译能过,链接不行)。const static数据成员在类定义体中初始化时(只有静态常量才可以在类定义中初始化),仍必须在外部定义。

 

// define and initialize static class member
int ClassType::staticMem = staticFunc();
// 这里staticFunc无需使用限定符,因为staticMem的定义就表示是在类定义作用域中
// 所以即使staticFunc()是私有的也无妨

 

 

 

posted @ 2010-01-09 20:57  断桥残雪  阅读(143)  评论(0编辑  收藏  举报