26 類的靜態成員函式

2021-10-23 22:39:07 字數 2614 閱讀 2651

注:部落格中內容主要來自《狄泰軟體學院》,部落格僅當私人筆記使用。

測試環境:ubuntu 10.10

gcc版本:9.2.0

一、未完成的需求

1)統計在程式執行期間某個類的物件數目

2)保證程式的安全性(不能使用全域性變數)

3)隨時可以獲取當前物件的數目(failure)

程式設計實驗

解決方案的嘗試

26-1.cpp

#include class test

~test()

int getcount()

};int test::ccount = 0;

int main()

操作:

1) g++ 26-1.cpp -o 26-1.out編譯正確,列印結果:

count = 0

count = 1000

分析:

如果靜態變數定義為共有的,可以通過類名直接訪問資料,是很不安全的做法。

二、問題分析

1) 我們需要什麼?

-    不依賴物件就可以訪問靜態成員變數

-    必須保證靜態成員變數的安全性

-    方便快捷的獲取靜態成員變數的值

三、靜態成員函式(防止破壞資料安全性,這樣只能直接訪問函式而不是資料)

1) 在c++中可以定義靜態成員函式

-    靜態成員函式是類中特殊的成員函式

-    靜態成員函式屬於整個類所有

-    可以通過類名直接訪問公有靜態成員函式(訪問方式)

-    可以通過物件名訪問公有靜態成員函式(訪問方式)(靜態成員函式只有這兩種方式可以訪問成員函式)

2) 靜態成員函式的定義

-   直接通過static關鍵字修飾成員函式

class test

static int func2();

}int test::func2()

程式設計實驗

靜態成員函式示例

26-2.cpp

#include class demo

;

int demo::geti()

void demo::staticfunc(const char* s)

void demo::staticseti(demo& d, int v)

int main()

操作:

1) g++ 26-2.cpp -o 26-2.out編譯正確,列印結果:

staticfunc: main begin...

d.i = 10

staticfunc: main end...

2) 通過物件名訪問公有靜態成員函式:

#include class demo

;

int demo::geti()

void demo::staticfunc(const char* s)

void demo::staticseti(demo& d, int v)

int main()

g++ 26-2.cpp -o 26-2.out編譯正確,列印結果:

staticfunc: main begin...

d.i = 10

staticfunc: main end...

staticfunc: aha

3)靜態成員函式vs普通成員函式

注意:經過測試靜態成員函式不能訪問普通成員函式和變數。

程式設計實驗

最後的解決方案

26-3.cpp

#include class test

~test()

static int getcount() //靜態成員函式

};int test::ccount = 0;

int main()

操作:

1) g++ 26-3.cpp -o 26-3.out編譯正確,列印結果:

ccount = 0

ccount = 2

ccount = 2

ccount = 3

ccount = 2

分析:

記錄類例項化物件的數目,必須將計數變數變為靜態成員變數,並且放在private下。靜態成員變數可以被普通成員函式或者靜態成員函式訪問,這點對於兩種成員函式無差別。不過,靜態成員函式可以通過類名被訪問,這種訪問方式普通不支援,為了增加客戶使用靈活性,通過靜態成員函式獲取靜態成員變數(類例項化物件數目)使用更好一些。

1、定義靜態成員函式後(訪問了私有靜態成員變數),直接訪問私有靜態成員變數非法操作。

2、靜態成員函式可以直接訪問靜態成員變數。

小結1)靜態成員函式是類中特殊的成員函式

2)靜態成員函式沒有隱藏的this引數

3)靜態成員函式可以通過類名直接訪問

4)靜態成員函式只能直接訪問靜態成員變數(函式)

C 第26課 類的靜態成員函式

本文學習自 狄泰軟體學院 唐佐林老師的 c 課程 總結說明 靜態成員變數的意義 為什麼要有靜態成員變數 是因為 成員變數都是每個物件專屬的,但是所有類共享乙個變數的話,就要用靜態成員變數 靜態成員函式的意義 靜態成員函式的意義是 如果沒有物件存在的時候,也可以訪問靜態成員變數。靜態成員函式也是公有的...

類靜態成員和類靜態成員函式

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...

第26課 靜態成員函式

未完成的需求 統計在程式執行期間某個類的物件數目 保證程式的安全性 不能使用全域性變數 隨時可以獲取當前物件的數目 failure 假設程式中沒有test物件,你就無法獲取當前物件的數目。因為在上乙個程式中是使用物件去呼叫成員函式的,此時如果沒有物件,如何去呼叫呢?解決方案1 include cla...