1.static局部變量:記憶功能和文件作用域,默認初始化。
2.static全局變量:內部連接(static變量、const變量和inline函數均爲內部連接類型),文件之間不會重名。
3.static成員變量:所有對象(包括子類對象)共享,一定需要再類體外初始化,但在類體外初始化時,無需再加上static關鍵字,!!!static是用於聲明的變量,這點與inline關鍵字正好相反,inline關鍵字是用於實現的變量。特殊特性:static成員對象允許非前向聲明;const成員函數可以修改static成員變量;static成員變量可以作爲形參類型的默認實參。
4.static成員函數:所有對象(包括子類對象)共享,可以在類內或類外初始化;非static成員函數可以調用static成員函數或static成員變量;static成員函數不可以調用非static成員。!!!static成員函數不能聲明爲virtual或者const型。!!!static成員函數不能聲明爲virtual或者const。
另外,附上對變量(函數)的聲明和使用的理解:
1.變量的類型分爲內部連接類型(const和static類型變量)和外部連接類型(非const和static類型變量)--內部連接類型可以在不同的文件中聲明相同名字的變量;外部連接類型只在一個文件裏面定義,在另外的文件裏面聲明。
2.對於外部連接類型變量,在文件中的聲明格式爲--extern int a;
3.對於外部連接類型函數,在文件中的聲明格式爲--[extern] void func();
類中靜態static成員和常量const成員的初始化工作:
1.常量const成員的初始化工作必須在初始化列表中完成。
class C{
public:
C():key(0){}
~C(){}
private:
const int key;
};
void main(){
C c1;
}
2.靜態static成員的初始化工作必須在類體外部完成初始化。
class C{
public:
C(){}
~C(){}
private:
static int key;
};
int C::key=0;
void main(){
C c1;
}
3.靜態常量static const成員的初始化有兩種方式:在類體內部聲明處定義;在類體外部重新定義。
第一種方式:
class C{
public:
C(){}
~C(){}
private:
static const int key=0;
};
void main(){
C c1;
}
第二種方式:
class C{
public:
C(){}
~C(){}
private:
static const int key;
};
const int C::key=0;
void main(){
C c1;
}
~!~