下面分兩個部介紹static關鍵字的使用:
(1)普通變數和成員函式
(2)類中的作用
#include using namespace std;
void fun();
static int n;
int main()
void fun()
輸出:
20
21
注意:
#include #include "fun.h"
using namespace std;
void fn();
static int n;
int main()
fun.cpp:
#include "fun.h"
#include using namespace std;
extern int n;
void f()
fun.h:
#ifndef __fun_h__
void f();
#endif // __fun_h__
這個程式在執行的過程中會出現錯誤,就是因為靜態全域性變數不能被其它檔案所用,這裡只需要將主檔案中將static關鍵字去掉就可以執行了。
注意:全域性變數和全域性靜態變數的區別
在區域性變數前,加上關鍵字static,該變數就被定義成為乙個靜態區域性變數
#include using namespace std;
void fun();
int main()
void fun()
輸出:
10
1112
靜態區域性變數有以下特點:
在函式的返回型別前加上static關鍵字,函式即被定義為靜態函式。靜態函式與普通函式不同,與靜態全域性變數類似,它只能在宣告它的檔案當中可見,不能被其它檔案使用。
下面通過三個檔案來進行說明:
main.cpp
#include #include "f.h"
using namespace std;
int main()
f.cpp
#include "f.h"
#include using namespace std;
void fun()
f.h
#ifndef __f__h__
static void fun();
#endif // __f__h__
這個程式在執行過程中也是錯誤的,原因也就是在f.**件中用static宣告了fun()函式。
在類內資料成員的宣告前加上關鍵字static,該資料成員就是類內的靜態資料成員
#include using namespace std;
class numbers
;int numbers::sum = 0;
numbers::numbers(int a, int b, int c)
int numbers::getadd()
int main()
輸出:
6
靜態資料成員具有以下特點:
與靜態資料成員一樣,我們也可以建立乙個靜態成員函式,它為類的全部服務而不是為某乙個類的具體物件服務。靜態成員函式與靜態資料成員一樣,都是類的內部 實現,屬於類定義的一部分。普通的成員函式一般都隱含了乙個this指標,this指標指向類的物件本身,因為普通成員函式總是具體的屬於某個類的具體物件的。通常情況下,this 是預設的。如上乙個函式getadd()實際上是this->getadd()。但是與普通函式相比,靜態成員函式由於不是與任何的物件相聯絡,因此它不具有this指 針。從這個意義上講,它無法訪問屬於類物件的非靜態資料成員,也無法訪問非靜態成員函式,它只能呼叫其餘的靜態成員函式
#include using namespace std;
class numbers
;int numbers::sum = 0;
numbers::numbers(int a, int b, int c)
// 靜態成員函式只能訪問靜態成員變數
int numbers::getadd()
int main()
輸出:
6
6
關於靜態成員函式,可以總結為以下幾點: C 基礎 靜態Static關鍵字
目錄 靜態static關鍵字 3.1靜態類 3.2靜態變數 3.3靜態方法 3.4靜態建構函式 3.5什麼時候適合用static修飾 3.6使用static時需要注意的地方 static靜態的,不變的,在某個類中只有乙個,不會因例項化物件的不同而不同。static可以修飾類 字段 屬性 方法 等。如...
this關鍵字 static關鍵字
1.當成員變數和區域性變數重名,可以用關鍵字this來區分 this 代表物件,代表那個物件呢?當前物件 this就是所在函式所屬物件的引用 簡單說 那個物件呼叫了this所在的函式,this就代表哪個物件 this也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...
java基礎 static關鍵字
static 關鍵字 可以用於修飾屬性,也可以用於修飾方法,還可以用於修飾類 static 修飾屬性 無論乙個類生成了多少個物件,所有這些物件共同使用唯 一乙份靜態的成員變數 乙個物件對該靜態成員變數進行了修改,其他物件 的該靜態成員變數的值也會隨之發生變化。如果乙個成員變數是 static 的,那...