類的靜態成員有兩種:靜態成員變數和靜態成員函式,語法是在普通成員變數和成員函式前加static關鍵字。
0、定義
class crect;
1、存在原因
靜態成員變數在本質上是全域性變數。乙個類,哪怕乙個物件都不存在,其靜態成員變數也是存在的。靜態成員函式並不需要作用在某個具體的物件上,因此本質上是全域性函式。設定靜態成員的目的,是為了將某些和類緊密相關的全域性變數和全域性函式寫到類裡面,形式上成為乙個整體,達到封裝的效果,但其效果與定義全域性變數/函式相同。
2、靜態與靜態成員變數/函式的區別
3、一些規則
4、案例
例1 通過類名呼叫類的普通成員函式與靜態成員函式
#include using namespace std;
class crect
static void show(){}
};int main()
編譯錯誤:error c2352: 『crect::setparam』 : illegal call of non-static member function
結論:不能通過類名來呼叫類的非靜態成員函式
例2 通過類的物件呼叫類的靜態成員函式與非靜態成員函式
#include using namespace std;
class crect
static void show(){}
};int main()
編譯通過
結論:可以通過類的物件來呼叫類的靜態/非靜態成員函式
例3 在類的靜態成員函式中使用類的非靜態成員變數
#include using namespace std;
class crect
static void show()
static void show()
;int crect::m_height = 0;//a
int main()
在a,b,c三處分別初始化類的靜態成員變數時只有a出初始化正確,b和c處初始化編譯出錯:error c2655: 『m_height』 : definition or redeclaration illegal in current scope
結論:類的靜態成員變數初始化的位置為類外且在main函式前(是否理解有誤??)
5、參考
c 靜態成員變數與靜態成員函式
普通成員變數每個物件各自持有乙份,而靜態成員變數只有乙份,被所有同類物件共享 普通成員函式一定是作用在某個物件上的,而靜態成員函式並不具體作用在某個物件上 訪問方式 訪問普通成員時,要通過物件名.成員名的方式,指明要訪問的成員變數是屬於哪個物件的,或要呼叫的成員函式作用於哪個物件 訪問靜態成員時,則...
靜態成員函式與靜態成員變數
此文針對於初學者或者對這一部分掌握不太清楚的人。首先靜態成員函式的宣告 static void setname qstring name 需要在函式的宣告前加static關鍵字。定義的時候和普通成員函式一樣,不需要加static,但是靜態成員函式只能訪問靜態成員變數和靜態成源函式。class dem...
靜態成員函式與靜態成員變數
這篇介紹了靜態成員函式與靜態成員變數,是我的讀書筆記,我希望它夠簡短但又比較全面,起到複習的作用。如果有一些c 知識記不清楚了,它可以幫你很快回憶起來。1 加在區域性變數的前面使之成為靜態區域性變數,作用域還是在函式內部,可是生存週期延長了。2 加在全域性變數的前面限定該變數作用域為檔案作用域,就是...