引用:
成員函式:無論靜態函式還是非靜態函式,都是屬於類的(這一點與資料成員的靜態非靜態不同),物件並不擁有函式的拷貝.
兩者的區別在於:
非靜態的函式由類物件(加.或指標加->;)呼叫,這時將向函式傳遞this指標.
而靜態函式由類名(::)(或物件名.)呼叫,但靜態函式不傳遞this指標,不識別物件個體,所以通常用來對類的靜態資料成員操作.
類的靜態成員(變數和方法)屬於類本身,在類載入的時候就會分配記憶體,可以通過類名直接去訪問;
非靜態成員(變數和方法)屬於類的物件,所以只有在類的物件產生(建立類的例項)時才會分配記憶體,然後通過類的物件(例項)去訪問。
靜態資料成員特點
靜態成員可以實現多個物件之間的資料共享,並且使用靜態資料成員還不會破壞隱藏的原則,即保證了安全性。因此,靜態成員是類的所有物件中共享的成員,而不是某個物件的成員。
使用靜態資料成員可以節省記憶體,因為它是所有物件所公有的,因此,對多個物件來說,靜態資料成員只儲存一處,供所有物件共用。靜態資料成員的值對每個物件 都是一樣,但它的值是可以更新的。只要對靜態資料成員的值更新一次,保證所有物件訪問更新後的相同的值,這樣可以提高時間效率。
靜態資料成員的使用方法和注意事項如下:
1、靜態資料成員在定義或說明時前面加關鍵字static。
2、靜態成員初始化與一般資料成員初始化不同。靜態資料成員初始化的格式如下:
《資料型別》《類名》::《靜態資料成員名》=《值》
這表明:
(1) 初始化在類體外進行,而前面不加static,以免與一般靜態變數或物件相混淆。
(2) 初始化時不加該成員的訪問許可權控制符private,public等。
(3) 初始化時使用作用域運算子來標明它所屬類,因此,靜態資料成員是類的成員,而不是物件的成員。
3、靜態資料成員是靜態儲存的,它是靜態生存期,必須對它進行初始化。
4、引用靜態資料成員時,採用如下格式:
《類名》::《靜態成員名》
靜態成員函式
靜態成員函式和靜態資料成員一樣,它們都屬於類的靜態成員,它們都不是物件成員。因此,對靜態成員的引用不需要用物件名。
在靜態成員函式的實現中不能直接引用類中說明的非靜態成員,可以引用類中說明的靜態成員。如果靜態成員函式中要引用非靜態成員時,可通過物件來引用。下面通過例子來說明這一點。
#include using namespace std;
class m
static void f1(m m);
private:
int a;
static int b;
};void m::f1(m m)
{ cout<
讀者可以自行分析其結果。從中可看出,呼叫靜態成員函式使用如下格式:
《類名》::《靜態成員函式名》(《參數列》);
執行結果:
a=5b=15
a=10
b=15
靜態成員 靜態成員函式
reference to non static member function must be called sort numbers.begin numbers.end cmp 做演算法題的時候遇到的乙個問題,和成員函式相關,這裡記錄一下備忘。首先上 class solution string p...
靜態資料成員與靜態成員函式
include include using namespace std class student student static intnumber protected static int noofstudents char name 40 int student noofstudents 0 靜...
靜態成員函式與靜態成員變數
此文針對於初學者或者對這一部分掌握不太清楚的人。首先靜態成員函式的宣告 static void setname qstring name 需要在函式的宣告前加static關鍵字。定義的時候和普通成員函式一樣,不需要加static,但是靜態成員函式只能訪問靜態成員變數和靜態成源函式。class dem...