静态成员变量和函数

               今晚把静态成员看了一下,这个在C++中还是很有用的,静态成员既可以是静态数据成员,也可以是静态成员函数。一个类的静态成员为该类的对象共用,不管我们创建了这个类的多少对象,其静态数据成员就拷贝一份。静态成员也可以对一些共享资源气功存取控制。

 

#include<iostream>

using namespace std;


/*静态成员函数的本质实际上是全局函数,静态成员易于维护和整理*/ 

class CRentangle{
    private:	
		int w;
		int h;
		static int Tatalarea;
		static int Tatalnumber;
	public:
		CRentangle(int w,int h ){
			this->w=w;
			this->h=h;
			Tatalarea+=w*h;
			Tatalnumber+=1;
		}
	    static void Display(); 
		~CRentangle(){
		
		Tatalnumber--;
			
		}
};

void CRentangle::Display(){
	cout<<"输出静态成员变量:"<<endl;
	cout<<Tatalarea<<endl<<Tatalnumber<<endl;
}



// 静态成员一定要初始化 
int CRentangle::Tatalarea=0;
int CRentangle::Tatalnumber=0;

int main(){
	CRentangle a(2,9),b(2,6);
	//cout<<CRentangle.Tatalarea<<endl;  错误 因为静态成员私有 不可以用调用 
      a.Display();
      CRentangle::Display();
	
	
	return 0;
}


 静态成员变量和函数_第1张图片      

 

 

// 静态成员一定要初始化   否则编译能通过,链接通不过
int CRentangle::Tatalarea=0;
int CRentangle::Tatalnumber=0;

 

在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数,因为呢静态成员不属于某个特定的对象,调用非静态成员变量不知道这个是属于谁的。


对于上面这个程序还有缺陷,,因为这仅仅是有参构造函数,如果无参构造函数怎么办,有时候调用复制构造函数怎么办,不是有所的构造函数来初始化,还有如果有临时对象的话,,那么只会调用析构函数,导致静态成员变量的值减少。

我们可以为CRentangle写一个复制构造函数

CRentangle::CRentangle(CRentangle &r){

      w=r.w;
      h=e.h;
      Tatalnumber++;
      Tatalarea+=w*h;
}

 

 

 

 

你可能感兴趣的:(C++,静态成员)