宣告為static的類成員(成員資料或成員函式)稱為類的靜態成員特性 :
靜態變數成員的初始化
對於靜態變數成員的初始化,不能在建構函式的初始化列表中直接進行初始化
class date
friend ostream& operator
<
private :
int year;
int month;
static
int day;
};//錯誤 c2438 「day」: 無法通過建構函式初始化靜態類資料 7.28 d:\code\7.28\7.28\main.cpp 227
直接在建構函式的初始化列表中進行操作會發生編譯錯誤要對static修飾的成員變數進行操作必須在類外先對其進行初始化,初始化的格式為 :(靜態變數成員資料型別)(類名):: (變數名) = (要初始資料值)
class date
friend ostream& operator
<
private :
int year;
int month;
static
int day;
};int date::day = 14; //初始化
在類外初始化完成之後可以用成員函式或者友元函式對其進行訪問與操作
class date
friend ostream& operator
<
private :
int year;
int month;
static
int day;
};int date::day = 14;
ostream& operator
<
靜態成員函式是指以static關鍵字修飾的類中的成員函式因此類的靜態成員函式和類的普通成員函式的區別是:接下來討論靜態成員函式,靜態變數成員呼叫與被呼叫的關係例1(靜態成員函式呼叫靜態成員變數)
#include
using
namespace
std;
class date
static
void print()
friend ostream& operator
<
private :
int year;
int month;
static
int day;
};int date::day = 14;
ostream& operator
<
int main()
執行結果
結論 : 靜態成員函式可以呼叫靜態成員變數
例2(靜態成員變數呼叫非靜態成員變數)
#include
using
namespace
std;
class date
static
void print()
;int date::day = 14;
ostream& operator
<
int main()
編譯結果 :錯誤 c2597 對非靜態成員「date::year」的非法引用 7.28d:\code\7.28\7.28\main.cpp 233結論 : 靜態成員函式無法呼叫非靜態成員變數例3(非靜態成員函式呼叫靜態成員變數)
#include
using
namespace
std;
class date
static
void print()
friend ostream& operator
<
void add()
private :
int year;
int month;
static
int day;
};int date::day = 14;
ostream& operator
<
int main()
執行結果 :
結論 : 非靜態成員可以訪問與操作靜態成員變數
例4(探測靜態成員函式是否含有this指標)
#include
using
namespace
std;
class date
static
void print()
friend ostream& operator
<
void add()
private :
int year;
int month;
static
int day;
};int date::day = 14;
ostream& operator
<
int main()
編譯結果 :錯誤 c2355 「this」: 只能在非靜態成員函式或非靜態資料成員初始值設定項的內部引用 7.28 d:\code\7.28\7.28\main.cpp 234結論 : 靜態成員函式是沒有this指標存在的,所以無法對非靜態成員變數進行操作 C 類的靜態變數成員和靜態成員函式的使用
1 類的靜態成員變數 當類的乙個成員變數被宣告為static型別時,該成員變數就是類的靜態變數,屬於類的所有例項。也就是說類的靜態變數是類的所有該類例項的全域性變數。靜態成員變數的初始化,與其他變數的初始化很不一樣,靜態成員需要在類外初始化,形式如下 靜態變數的型別 類名 類的靜態成員變數名 初始化...
C 類中的靜態變數和靜態成員函式
靜態資料成員 下面看乙個例子 include class point public void output static void init void main void point pt pt.init pt.output 這樣編譯是不會有任何錯誤的。下面這樣看 include class poi...
Python 類變數,成員變數,靜態變數,區域性變數
區域性 class testclass object val1 100 def init self self.val2 200 def fcn self,val 400 val3 300self.val4 val self.val5 500 if name main inst testclass p...