background image

      Internet   a2(" 中 国 软 件 开 发 实 验 室 ","www.cndev-lab.com");  
}  

void

 

fn(Internet

 

&s)  

{  
  

  

cout

<<s.Rq().

count

;  

}  

void

 

main

()  

{  
     

cout

<<Internet::

count

<<endl;

//

 

静 态 成 员 值 的 输 出

  

  

vist();  

  

  

Internet::Sc();

//

 

      Internet   b(" 中 国 软 件 开 发 实 验 室 ","www.cndev-lab.com");  
  

  

Internet::Sc();  

  

  

fn(b);  

  

  

cin

.get();  

}
  上面代码我们用了几种常用的方式建立对象,当建立新对象并调用其构
造函数的时候,静态成员 cout 便运行加 1 操作,静态成员的初始化应该在主函
数调用之前,并且不能在类的声明中出现,通过运行过程的观察我们发现,
静态成员 count 的状态并不会随着一个新的对象的新建而重新定义,尽而我
们了解到类的静态成员是属于类的而不是属于哪一个对象的,所以静态成员
的 使 用 应 该 是 类 名 称 加 域 区 分 符 加 成 员 名 称 的 , 在 上 面 的 代 码 中 就 是
Internet::count,虽然我们仍然可以使用对象名加点操作符号加成员名称的
方式使用,但是不推荐的,静态态类成员的特性就是属于类而不专属于某一

 

静态成员函数的特性类似于静态成员的使用,同样与对象无关,调用方法为类
名称加域区分符加成员函数名称,在上面的代码中就是 Internet::Sc();,静
态成员函数由于与对象无关系,所以在其中是不能对类的普通成员进行直接

 

 

  如果上面的 static void Internet::Sc()

 

修改成为:

static

 

void

 

Internet::Sc()

//

 

{  
  

  

cout

<<name<<endl;

//

 

  

  

cout

<<

count

<<endl;  


  静态成员函数与普通成员函数的差别就在于

缺少 this 指针

,没有这个 this

指 针 自 然 也 就 无 从 知 道 name 是 哪 一 个 对 象 的 成 员 了 。
  根据类静态成员的特性我们可以简单归纳出几点,静态成员的使用范围:
 

 

 

1.