1.C++編程簡介
推薦書籍
- 《C++ Primer第五版》
- 《Effective C++》
- 《C++標準庫》
- 《STL原始碼剖析》
2.頭檔案與類的宣告
Classes根據是否擁有pointer members分成兩類,其中string的物件是一個指標,指向一個字串,

自己宣告的頭檔案用"",標準庫頭檔案用<>

C++和C簡單程式的不同寫法:

Header頭檔案的防衛式宣告:#ifndef __COMPLEX__用來判斷是否定義過 complex.h頭檔案,如果沒有定義過則用#define __COMPLEX__定義, #endif表示判斷結束,

頭檔案的布局與宣告:

類模板用于物件需要不同型別的引數的時候,其中類里面形參和實參都要寫成T,物件宣告時要加上引數的型別:

3.建構式
inline可以讓程式執行變快,函式在本體內定義,就自動成為inline,如果在外面定義就不是inline,但可以加上inline宣告他是inline,但到底是不是inline是由編譯器決定的,如果函式太復雜就不會是inline,
在類中,資料都應該被定義成私有的(private),私有變數不可以被物件取出,除非變數是共有的(public),private和public可以交叉著寫,不用寫完全部的public再寫private,
建構式可以指定默認引數,同時切記建構式前面沒有回傳值型別,下圖中是建構式的特殊語法用來初始化,如果將引數放到括號里面就是變數初始化后的賦值階段了,效率會低,
不帶指標的類多半不用寫析構,

多載通常和建構式一起使用,在函式編譯后,函式名字其實是不同的,函式有了默認值,也可以去寫多載函式,但是對于圖中右邊的c1和c2,使用左邊的1和2都是可以的,所以對于圖中情況不行,

4.引數傳遞與回傳值
建構式放在private里以后就不能在類外創建物件,但是這種寫法通常用在單例模式Singleton中:
函式右邊加上const說明對函式的操作并不會改變資料,于是這樣不會改變資料的函式通常會在函式名右邊加上const,
物件定義時前面加上const說明物件是不可以被改變的,如果函式不寫const,就存在可能會更改物件的可能性(更改的話會報錯),這樣就和物件的定義矛盾,因此寫上const更為周全,
傳參考相當于傳指標,大多數情況下希冀傳參是參考,如果不希望傳入引數被修改,就在型別后面加上&:
回傳值和回傳參考相比,盡量回傳參考,同樣在型別后面加上&:
通過宣告友元可以獲得類中private變數的值,但是這樣的話會打破面向物件的封裝性,其實也可以不寫友元,通過函式來獲取到,但是由于使用了函式效率會變低,
同一class定義出來的各個物件之間互為友元:
在下面圖片中,ths指標指向的的re和im會被改變,而r的re和im不會被改變,所以傳入的r參考前加了const,如果__doapl函式內寫的是c = ths->re + r.re;,那么就不能再傳參考作為回傳值,因為在函式結束后,c會被銷毀,
5.運算子多載與臨時物件
多載的實作有兩種方式,可以寫成成員函式和非成員函式,實際上所有的成員函式都自帶了一個隱藏的this指標,這個指標指向呼叫者,誰呼叫我我就指向誰:
下圖中,參考用在傳遞函式引數和回傳值的時候,左圖中的ths,傳進來的是一個指標,回傳的是指標所指向的值,傳遞者無需知道接收者以何種方式接收
多載函式的回傳值型別需要是complex而不能是void,因為在左邊的連串賦值中,c2加完c1之和還需要傳給c3加
下圖中的非成員函式多載寫出了三種不同情況下的函式,對應右邊的加法,其中,非成員函式中沒有this指標
非成員函式多載的回傳值不能是參考,因為加法運算完成以后必須創建出來一個local object來接收,如果傳參考,物件離開這個函式就死掉了,所以要利用回傳值,
下圖中,typename()表示創建臨時物件,不需要給物件以名稱,臨時物件的生命在下一行代碼就結束,右邊三個物件也是臨時物件,
下圖中的取反功能兩個函式,-函式中因為創建了一個新空間存放臨時物件,所以必須回傳值;而上邊的+ 函式什么事情都沒做,所以即可以回傳參考,也可以回傳值,
下圖中<<函式把右邊輸出到左邊cout身上,所以不能寫成一個成員函式,只能寫全域的
cout的型別是ostream,可以傳參考,但是不能加const,如果加了const表示ostream在函式里面不能改變,其實ostream在每一次輸出時候都在被修改
cout << c1 << conj(c1);是一個連串的輸出,接收c1以后還要接收conj(c1),所以回傳型別是ostream,如果只有一個<<,回傳型別可以實void
6.總結
- 建構式的初始化寫法;
- 函式該不該寫const
- past by refrence 還是 past by value
- 資料應該是private,而函式應該是public的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/346839.html
標籤:C++
上一篇:ASP.NETCoreMVC:如何使用物體框架將物體系結到特定用戶
下一篇:C++的虛函式表和虛析構
