類的靜態成員分為靜態數據成員和靜態函數成員。先來看看類的靜態數據成員:一、類的靜態數據成員有什麼用?
類實現了數據和數據的操作封裝在一起,每個類的對象都會分配好內存來保存自己的數據成員,但是往往某個類的眾多對象需要一些數據共享,比如定義了Person類,實例化了person1,person2,person3,但是我現在想知道我到底實例化了多少個person對象,怎麼辦?一個想法是定義一個count數據,這個數據為這些person對象共享,每個person都可以訪問該count數據成員,這就是類的靜態數據成員的作用:靜態成員是解決同一個類的不同對象之間數據和函數共享的問題。
二、怎麼定義一個靜態數據成員用關鍵字 static 來定義,比如 static int count .三、實例看如下代碼:<span style="font-size: 14px;">class Point { public:Point(int m=0, int n=0 )
{ this->x = m ;this->y = n ;this->count ++ ;} ~Point() { this->count —— ; } int getX() { return this->x ;} int getY() { return this->y ;} void ShowCount() { cout << "The numbers of count are :" << this->count << endl;} private:int x ;int y ;static int count ;} <br>int Point::count = 0 ;</span> count 就被定義為 靜態成員變量,那麼 count 就可以為所有的Point 對象所共享,通過對象名。ShowCount 來訪問 count:Point A(4,5) ;A.ShowCount() ; // 1 Point B(A) ;B.ShowCount() // 2 count 為 靜態成員,每個對象的創建和銷毀都會影響到count .四、靜態數據成員需要注意的地方1. 靜態數據成員不屬於任何一個對象,它只屬於類。
2. 靜態數據成員的初始化要在實例化對象之前,否則你要是用 類名::靜態數據成員 來訪問 (這個可以在沒有實例化對象)輸出錯誤結果。
3. 一般靜態成員不能在內聯函數中訪問。
五、 類的靜態函數成員在上面的例子中,每個對象都與一個 ShowCount 的拷貝,可以與 類的靜態數據成員一樣,設為共享方式。這就需要定義為靜態函數成員了。
相關定義如下:class Point { public:Point( int m , int n ) { x = m ; y = n ; count++ ;} Point( Point & p) ;~Point() { count—— ;} static void ShowCount() { cout << count << endl; } private:int x ;int y ;static int count ;} int Point::count = 0 ; // 注意初始化的方式在如下代碼中:Point A(4,5) ;A.ShowCount() ; // 通過對象名引用Point:: ShowCount() // 通過類名來引用,推薦使用這個方式需要注意的是,靜態成員函數中不可以使用 this 指針,一般是用來訪問 靜態數據成員的,不做其他用途。(訪問非靜態成員需要通過參數傳遞對象名,通過對象名來訪問)。