頭文件
編譯------只編譯 當前的 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;
}