当前位置:主页   - 电脑 - 程序设计 - C/C++
C++类静态数据成员与类静态成员函数
来源:网络   作者:   更新时间:2012-02-16
收藏此页】    【字号    】    【打印】    【关闭

  在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢?

  这个问题便是本章的重点:

  声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。

  下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为protected(保护状态)的,但是我们为了简化代码,使要说明的问题更为直观,更容易理解,我们在此处都设置为public。

  以下程序我们来做一个模拟访问的例子,在程序中,每建立一个对象我们设置的类静态成员变自动加一,代码如下:

#include<iostream> 
usingnamespacestd; 
 
classInternet 
{ 
public: 
   Internet(char*name,char*address) 
   { 
     strcpy(Internet::name,name); 
     strcpy(Internet::address,address); 
     count++; 
   } 
   staticvoidInternet::Sc()//静态成员函数 
   { 
     cout<<count<<endl; 
   } 
   Internet&Rq(); 
public: 
   charname[20]; 
   charaddress[20]; 
   staticintcount;//这里如果写成staticintcount=0;就是错误的 
}; 
 
Internet&Internet::Rq()//返回引用的成员函数 
{ 
   return*this; 
} 
 
intInternet::count=0;//静态成员的初始化 
voidvist() 
{ 
   Interneta1("中国软件开发实验室","www.cndev-lab.com"); 
   Interneta2("中国软件开发实验室","www.cndev-lab.com"); 
} 
voidfn(Internet&s) 
{ 
   cout<<s.Rq().count; 
} 
voidmain() 
{ 
   cout<<Internet::count<<endl;//静态成员值的输出 
   vist(); 
   Internet::Sc();//静态成员函数的调用 
   Internetb("中国软件开发实验室","www.cndev-lab.com"); 
   Internet::Sc(); 
   fn(b); 
   cin.get(); 
}

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

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明