C++之靜態成員變量、靜態成員函數、編譯規則、雙向依賴


頭文件



編譯------只編譯 當前的 CPP文件      .h文件是不能編譯的
編譯時,如果出現 不認識的 數據類型、函數--------把他們的頭文件加上
   
注意:
初學------只 編譯當前的 cpp文件
多個CPP文件 都編譯成功了-----再 點擊Build(光 Linking)


強調:
在Student.h中 如果用了 #include "Student_college.h"    ----Student_college.h中 也用了#include "Student.h"
則 2個類之間爲 雙向依賴-----強雙向依賴-------導致 編譯不過




靜態


靜態成員變量 靜態成員函數
   
語法:
在.h中,在某個成員函數 前 加 static


什麼時候,需要將 某個成員函數 定義爲 靜態?
  工具類 下的 成員函數。
  數學類-----工具類
     包含的靜態成員函數:sum   max   min   
     

靜態成員函數

代碼:


//main.cpp     
#include <iostream>
#include "Math.h"
using namespace std;


/*
int sum(int a,int b)
{
	return a+b;
}*/


int main()
{
	/*
	int a=10;
	int b=20;
	int result=sum(a,b);
	cout<<"sum is "<<result<<endl;*/


	
	/*
	CMath math;
	int result=math.sum(10,20);
	cout<<"sum is "<<result<<endl;*/


	
	int result=CMath::sum(10,20);
	cout<<"sum is "<<result<<endl;


	return 0;
}




//Math.h
class CMath  
{
public:
	CMath();
	virtual ~CMath();
	static int sum(int a,int b);
};






//Math.cpp
#include "Math.h"
CMath::CMath()
{


}


CMath::~CMath()
{


}




int CMath::sum(int a,int b)
{
	return a+b;
}






 靜態成員變量

   -----肯定會 用到 靜態成員函數
   
爲什麼使用 靜態成員變量?
因爲不讓使用 全局變量。

語法:
在.h中,在普通的成員變量前 加 static
在.cpp中,初始化 靜態成員變量爲 0----    int CStudent::total=0;

在.cpp中,所有的成員函數,都可以操作該 靜態成員變量  ------  本例中,構造函數 操作 它

注意:
靜態成員函數   只能訪問  靜態成員變量
本例,getTotal()函數,就只能訪問 total

代碼:


//main.cpp
#include <iostream>
#include "Student.h"


using namespace std;


//int total=0;


int main()
{
	CStudent stu1(1001,"aa");
	CStudent stu2(1002,"bb");
	CStudent stu3(1003,"cc");


	cout<<"total is "<<CStudent::getTotal()<<endl;
	cout<<"total is "<<stu1.getTotal()<<endl;
	cout<<"total is "<<stu2.getTotal()<<endl;
	cout<<"total is "<<stu3.getTotal()<<endl;


	return 0;
}


//Student.h
class CStudent  
{


	int number;
	char *name;
	static int total;
public:
	CStudent();
	virtual ~CStudent();
	CStudent(int number,char *name);
	static int getTotal();


};




//Student.cpp
// Student.cpp: implementation of the CStudent class.
//
//////////////////////////////////////////////////////////////////////
#include <iostream>


#include "Student.h"


int CStudent::total=0;


using namespace std;


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////


CStudent::CStudent()
{
	total++;
}


CStudent::~CStudent()
{


}


CStudent::CStudent(int number,char *name)
{
	this->number=number;
	this->name=new char[strlen(name)+1];
	strcpy(this->name,name);
	total++;
}


int CStudent::getTotal()
{


	return total;
}


	


   




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章