C++之类的静态成员

        在C++语言中,静态成员可以实现类的多个对象之间的数据共享。静态成员不是属于某个对象的,而是属于类的。它是某个类的所有对象共有的。静态成员有两种:静态数据成员和静态成员函数。

       静态数据成员

       静态数据成员作为类的一种成员,它被类的所有对象所共享,而不是属于某个对象的。在存储上只需存储一处,就可以供所有的对象使用。静态数据成员由于是公有的,因此它的值对每个对象都是一样的。静态数据成员的值可以被更新。只要静态成员的值更新一次,所有对象的该静态成员都被更新,并且值都是相同的。

       静态数据成员的定义或说明: 

           静态数据成员的定义或说明在类体内,在该成员名的类型说明符前边加关键字static。

       静态数据成员的初始化:

       静态数据成员被定以后,必须对它进行初始化。初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,比如主函数前面。静态数据成员的初始化与该类的构造函数无关,格式为: <数据类型>  <类名> :: <静态数据成员名>=<初始值>;  作用域运算符“::”用来说明静态数据成员所属的类,在初始化时,不加关键字static,以防止与静态对象描述某个类的对象的作用域)相混淆。

       定义静态数据成员时,可根据需要规定它的访问权限控制符,静态数据成员是静态生存期,只对它进行一次初始化,将始终保持其值,直到下次改变为止。

       静态数据成员引用的格式:<类名>   ::   <静态数据成员名>  

       由于静态数据成员时一种类的数据成员,因此使用对象引用(<对象名> . <静态数据成员名>)也是可以的,但是通常使用类名加作用域运算符“::”来引用。

       分析下面的程序;

<span style="font-size:18px;">#include <iostream.h>
class Myclass
{
public:
	Myclass(int a,int b,int c);//带三个参数构造函数
	void GetNumber();//一般的成员函数
	int GetSum(Myclass m);//参数为对象的一般成员函数
private:
	int A,B,C;
	static int Sum;//类内定义的静态数据成员
};
int Myclass::Sum(0);//类体外对静态数据成员赋值为0
Myclass::Myclass(int a,int b,int c)//构造函数的函数体
{
	A=a;
	B=b;
	C=c;
	Sum+=A+B+C;//构造函数引用静态数据成员
}
void Myclass::GetNumber()
{
	cout<<A<<","<<B<<","<<C<<endl;
}
int Myclass::GetSum(Myclass m)
{
	return Myclass::Sum;//通过类来引用静态数据成员
}
void main()
{
	Myclass M(3,4,5),N(5,6,7);
	N.GetNumber();//在主函数中对成员函数的调用只能通过对象成员的引用方法
	cout<<M.GetSum(M)<<";"<<M.GetSum(N)<<endl;
}</span>

分析:(1)定义的对象M和N调用构造函数来实现初始化

           (2)成员函数void Myclass::GetNumber()被调用实现对对象N的输出即为5;6;7

           (3)调用成员函数int Myclass::GetSum(Myclass m)实现对象M和N中的静态数据成员的返回。

 

       静态成员函数

       静态成员函数的定义和说明与静态数据成员一样,在成员函数名前的类型说明符前加关键字static。函数的实现可以再类体内,也可以在类体外,与一般的成员函数相同。

       在静态成员函数的实现中,可以直接引用静态成员。但不能直接引用非静态成员。如果要引用非静态成员,可以通过对象来实现。对静态成员函数的引用格式为:<类名> :: <静态成员函数> ( <参数表> )。有时也用对象来引用静态成员函数的格式为:<对象名> . <静态成员函数名>( <参数表> )

        分析程序:

#include <iostream.h>
class M
{
public:
	M(int a)//带有一个参数构造函数并且函数体写在类体内
	{
		A=a;
		B+=a;
	}
	static void fun(M m);//定义的带有一个参数为对象静态成员函数
private:
	int A;
	static int B;//定义的一个静态数据成员
};
void M::fun(M m)//静态成员函数的函数体
{
	cout<<"A="<<m.A<<endl;
	cout<<"B="<<B<<endl;
}
int M::B=10;//对静态数据成员的初始化
void main()
{
	M P(6),Q(8);
	M::fun(p);//使用类名来引用静态成员函数
	Q.fun(Q);//使用对象成员来引用静态成员函数
}

分析:(1)先调用构造函数来实现对象P和Q的初始化

           (2)然后引用函数静态成员函数实现对数值的输出

 


 

       

      

 

 

 

 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值