C++類/對象學習筆記

這裏說幾點(和java,python)不一樣的:

*.類定義是以關鍵字 class 開頭,後跟類的名稱。類的主體是包含在一對花括號中。類定義後必須跟着一個分號或一個聲明列表。

函數相關:

先複習一下函數聲明和函數定義的相關知識:

“函數定義”是指對函數功能的確立,包括指定函數名,函數值類型、形參類型、函數體等,它是一個完整的、獨立的函數單位。

而“函數聲明”的作用則是把函數的名字、函數類型以及形參類型、個數和順序通知編譯系統,以便在調用該函數時系統按此進行對照檢查(例如函數名是否正確,實參與形參的類型和個數是否一致)。

在書寫形式上,函數聲明可以把函數頭部複製過來,在後面加一個分號;而且在參數表中可以只寫各個參數的類型名,而不必寫參數名。

再來說一下頭文件,這個東西是c/c++的特色:

通常,在一個C++程序中,只包含兩類文件——.cpp文件和.h文件。其中,.cpp文件被稱作C++源文件,裏面放的都是C++的源代碼;而.h文件則被稱作C++頭文件,裏面放的也是C++的源代碼。

類比java的包,也就是import後面的東西 , 假如你在C++裏要導個東西 ,不能直接 "#include 'xxx.cpp' " .而是要先寫個和源代碼同名的頭文件(.h),這個頭文件裏放變量和函數的聲明,最後"#include 'xxx.h' ".相比其他語言C++導包的過程多了一步.

優勢:

有兩個用處,一個是在開發編譯的時候,在各個編譯單元(Compile Unit)之間共享同樣的定義;一個是在發佈程序庫的時候,讓使用者知道調用接口。比ctrl+o看源碼可能方便一點

注意點:

防重入開關,C++ 編譯器自適應開關,頭文件裏應該 ,include 所有該文件中所使用的其它接口頭文件,再詳細的就不在這裏寫了,這裏主要寫類和對象.

成員函數:

聲明寫在.h中,定義寫在.cpp中,記的在函數名稱前加"類名 ::(範圍解析運算符)". 或者寫成內聯函數(地下有).

構造函數:

可以簡單寫成沒有返回值的成員函數,但這裏很容易出問題,詳細版本在此:https://blog.csdn.net/realliyuhao/article/details/106319244

析構函數:

是類的一種特殊的成員函數,它會在每次刪除所創建的對象時執行。

析構函數的名稱與類的名稱是完全相同的,只是在前面加了個波浪號(~)作爲前綴,它不會返回任何值,也不能帶有任何參數。析構函數有助於在跳出程序(比如關閉文件、釋放內存等)前釋放資源。

拷貝構造函數:

是一種特殊的構造函數,它在創建對象時,是使用同一類中之前創建的對象來初始化新創建的對象。詳細信息:https://blog.csdn.net/realliyuhao/article/details/106328954

友元函數:

是定義在類外部,但有權訪問類的所有私有(private)成員和保護(protected)成員。詳細信息在此:

https://www.runoob.com/cplusplus/cpp-friend-functions.html,

https://www.cnblogs.com/zhuyf87/archive/2013/02/25/2932682.html

內聯函數:

內聯函數是通常與類一起使用。如果一個函數是內聯的,那麼在編譯時,編譯器會把該函數的代碼副本放置在每個調用該函數的地方。

注意點:

如果想把一個函數定義爲內聯函數,則需要在函數名前面放置關鍵字 inline;

在類定義中的定義的函數都是內聯函數;

當函數體比較小的時候, 內聯該函數可以令目標代碼更加高效,這其實就是個空間代價換時間的i節省. 對於存取函數以及其它函數體比較短, 性能關鍵的函數, 鼓勵使用內聯.

其內部不允許使用循環語句和開關語句.

this 指針(->):

Java裏的this,python裏的self,在python中體現得比C++更明顯,類內部的函數第一個參數就是self,甚至可以顯示命名.還有,友元函數沒有該指針,該指針不能訪問靜態成員變量.

類的靜態成員:

基本的:https://www.runoob.com/cplusplus/cpp-static-members.html

一些有意思的:

https://blog.csdn.net/lms1008611/article/details/81408236 靜態成員的基本用法;

https://blog.csdn.net/u011857683/article/details/52294353 靜態函數訪問非靜態成員

指向類的指針:

與指向結構的指針類似,訪問指向類的指針的成員,需要使用成員訪問運算符 ->,就像訪問指向結構的指針一樣。與所有的指針一樣,您必須在使用指針之前,對指針進行初始化。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章