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.
用
来
保
存
对
象
的
个
数
。