#include <iostream>
using namespace std; class Internet
{
public:
Internet(char *name,char *address)
{
strcpy(Internet::name,name);
strcpy(Internet::address,address);
count++;
}
static void Internet::Sc()//静态成员函数
{
cout<<count<<endl;
}
Internet &Rq();
public:
char name[20];
char address[20];
static int count;//这里如果写成static int count=0;就是错误的 ( 编译器规定的!)
}; Internet& Internet::Rq()//返回引用的成员函数
{
return *this;
} int Internet::count = 0;//静态成员的初始化
void vist()
{
Internet a1("中国软件开发实验室","www.cndev-lab.com");
Internet a2("中国软件开发实验室","www.cndev-lab.com");
}
void fn(Internet &s)
{
cout<<s.Rq().count;
}
int 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.用来保存对象的个数。


  2.作为一个标记,标记一些动作是否发生,比如:文件的打开状态,打印机的使用状态,等等。


  3.存储链表的第一个或者最后一个成员的内存地址。

最新文章

  1. [Q&amp;A] C1DataGrid 奇葩的 BeginNewRow() 方法
  2. Easyui dialog中嵌入iframe
  3. 电容参数:X5R,X7R,Y5V,COG 详解
  4. 【原创】Kakfa cluster包源代码分析
  5. Python学习(14)模块二
  6. Linux 多核下绑定硬件中断到不同 CPU(IRQ Affinity) 转
  7. 在iframe下的页面锚点失效问题,用jquery进行修复
  8. .NET设计模式(16):模版方法(Template Method)(转)
  9. iOS开发常用国外网站清单
  10. linux下启动和关闭网卡命令及DHCP上网
  11. 使导出excle文档实现ALT+Enter的效果()
  12. linux新建磁盘并分区
  13. objective-c 中代码块(blocks)
  14. 《Mastering Opencv ...读书笔记系列》车牌识别(II)
  15. 剑指offer 整数中1 出现的次数
  16. 深入理解Python的字符编码
  17. Tensorflow数学运算
  18. 两台Linux机器传送文件
  19. Cylinder Candy(积分)
  20. java 标准异常

热门文章

  1. C语言实现的多线程定时器
  2. 2.2.2 Sqoop2 基本架构
  3. linux seccomp使用和原理
  4. 用C#实现模拟双色球中奖程序 控制台应用程序
  5. 使用BigDecimal舍小数取整数
  6. Azure Terraform(三)部署 Web 应用程序
  7. Java NIO 文件通道 FileChannel 用法
  8. Docusaurus2 快速建站,发布 GitHub Pages
  9. 【Flutter】功能型组件之对话框详解
  10. .NET 调整图片尺寸(Resize)各种方法