C++类中的静态成员是类中各个对象所共享的成员,从数据共享的角度出发,介绍静态成员在类中实现数据共享的方法、作用。
C++中类的成员分为静态数据成员和静态成员函数。它的作用类似于全局变量,可以实现C++多个对象之间的数据共享,但全局变量在程序中的可操作性难于控制,经常会带来不安全性,所以,考虑到程序的安全性,作者在本文讲述了静态成员在C++程序中的使用方法及作用。
一、静态数据成员的应用
C++中的静态数据成员是同一个类中所有对象所共享的成员,静态数据成员中存放的是所有对象的值,不是某一个对象的值,所以同一类中的每个对象的值都是一样,但它的值也是可以改变的。通过下面的实例可以对以上的内容加以证实、说明静态数据成员在C++类中的使用方法及作用。
(一)静态数据成员的定义、初始化
静态数据成员定义是以static关键字开始,后跟静态数据成员类型符、变量名;例:staticints;
(二)静态数据成员的初始化
静态数据成员的初始化是在类体外进行,初始化时不用加访问权限符,但是静态成数据成员是类的成员,所以在初始化时应指明该成员的类名;例如在类名为 Tstu的类中定义了一名为s整型静态数据成员,则初始化格式为:int Tstu::s =0;
(三)静态数据成员的引用实例
#include
class Tstu//类的说明;
{public://定义二个成员函数;
Tstu(int a,int b); //定义构造函数,用来对数据成员赋初值;
bb( );
private:
int x,y;//定义二个数据成员;
static int s;};//定义一个静态的数据成员,类Tstu定义结束;
int Tstu::s=0; //静态数据成员的赋值;
Tstu::Tstu(int a,int b)//构造函数的实现部分;
{ x=a;y=b;}
void Tstu::bb( )//成员函数的实现部分;
{s=s+x+y;cout<<”s=”< void main( )//主函数;
{Tstu t1(10,20),t2(5,3);
t1.bb( );t2.bb( );}
对于以上的程序,类Tstu中的t1对象调用成员函数bb( )之后,静态数据成员s中的值是30,那么对象t2在调用前,对于对象t2,s中的值已是30,因为s中的值是每个对象所共享的,t2对象调用后,s中最后的值是38。
我们再来看以下代码:
#include
class Ta{
public:
Ta(){n++; } //定义构造函数,当定义对象时n的值自动加1;
~Ta(){n--; } //定义析构函数,释放对象时n的值自动减1;
int sum(){return n; }//成员函数sum( )用来返回静态数据成员n的值;
private:
static int n;};
int Ta::n = 0;
当创建该类对象实体时,由于n为所有对象所共享的数据,从而可以统计当前创建的所有对象的数量。这一技巧可以运用到很多方面,如对象实体的互斥关系,引用计数等相关方面。C++类中的静态成员有一个非常好的功能,那就是无论类定义了多少个对象,这些对象始终都共同使用这一个静态成员,在使用时需要注意的是类静态数据成员除了在类中形式说明之外,必须在使用前在对象说明之外作定义性说明,主要是为了给类中静态数据成员分配内存。通过这个实例可更加清晰的解述静态数据成员在类中实现数据的方法、作用。
二、静态成员函数的应用
静态成员函数与静态成员的特性相似,属于类的成员,不是对象的成员。在静态成员函数的实现中,可以直接引中类中说明的静态成员。下面通过具体的实例说明静态成员函数的应用。
我们可以通过以下的代码来看看静态成员函数的应用:
#include
class T
{public:
T(int a){x=a;y=y+a;}
Static void f1(T t);//定义静态成员函数;
Private:
int x;
static int y;};
void T::f1(T t)
{cout<<”x=”< cout<<”y=”< int T::y=0;
void main( )
{T m1(2),m2(4);
T::f1(m1);T::f1(m2);}
以上程序的执行结果分别是x=2,y=6和x=4,y=6; 在T类中,定义了静态成员函数f1( ),在该函数的实现中,可以直接引有类的静态数据成员,但引用非静态成员是通过对象进行的,对于类静态函数成员而言,则该函数只能涉及其它类静态成员时,否则该函数不具有任何确切含义,因为不同对象非静态成员取值可能不同。
原文链接:http://www.lunwenfb.com/lunwen/jisuanji/jisuanjiyingyong/72.html