一:
1.C++98郁妈、C++03猩系、C++11、C++14
2.基于對象:單純的只是一個類兆蕉,不與其他類有聯(lián)系
3.面向對象:類與類之間有關系:繼承羽戒、組合、委托
4.類可以簡單分為兩種:帶指針的和不帶指針的(不需要寫析構函數(shù))
帶指針的類的寫法注意:
二:頭文件與類聲明
1.防衛(wèi)式聲明:防止頭文件被多次include虎韵,一定要使用防衛(wèi)式聲明易稠;
2.頭文件:
1)前置聲明:照顧到代碼的編譯順序,使用前置聲明時包蓝,只能使用類的指針或者引用驶社。
為什么?因為前置聲明是一種不完整的聲明测萎,只新類中沒有需要了解原類大小或行為的操作亡电,使用指針或引用時不需要了解原類的大小,
2)類聲明
3)類定義
三:構造函數(shù)
1.直接在類內定義成員函數(shù)硅瞧,會建議編譯器inline份乒;inline函數(shù)必須放在頭文件中定義
2.內聯(lián)函數(shù),就是編譯器將函數(shù)定義({...}之間的內容)在函數(shù)調用處展開腕唧,藉此來免去函數(shù)調用的開銷或辖。
3.成員初值列實際上是調用成員的構造函數(shù),只有構造函可以使用成員初值列枣接。
4.不帶指針成員的類颂暇,并不需要寫析構函數(shù),直接使用編譯器默認給出的析構函數(shù)月腋;如果有指針的話蟀架,需要在析構函數(shù)中delete;
5.重載的函數(shù)編譯時會有命名傾軋瓣赂,在編譯器處理時名稱已不相同
6.構造函數(shù)重載時注意:參數(shù)全部有默認值的構造函數(shù)和無參的構造函數(shù),使用時會出現(xiàn)二義性片拍;
四:參數(shù)傳遞與返回值
1.singleton設計模式中用到:把構造函數(shù)放在private區(qū)域中(只能內部調用構造)煌集;
const
2.修飾函數(shù):函數(shù)分為會改變數(shù)據(jù)內容的和不會改變數(shù)據(jù)內容的,不會改變數(shù)據(jù)內容的函數(shù)一定要用const修飾捌省;
3.修飾常量:const修飾了對象苫纤,這個對象只能調用const修飾的成員函數(shù):因為const修飾對象,則該對象是常量纲缓,內容不可以修改卷拘,如果調用的成員函數(shù)無const修飾,則該函數(shù)默認可以修改該對象內容祝高,這里有矛盾栗弟,所以編譯會不通過。
4.pass by value與pass by reference(優(yōu)) ??return by value(必須返回函數(shù)中臨時創(chuàng)建的對象的時候使用)與return by reference(優(yōu))工闺。一個函數(shù)的返回結果存放在原先已有的對象中乍赫,則return by refenerce,如果放在另外的對象中,則return by value:放在另外的對象中需要產生一個臨時對象保存結果陆蟆,將該臨時對象的值賦值給另外的對象雷厂,如果return by reference,臨時對象的內容會丟失叠殷,雖然語法并沒有錯誤改鲫。
5.修飾參數(shù):盡量所有的參數(shù)都Pass by reference (to const)、返回值都return by reference(to const)
6.Ex: ??Func(const para&)//如果不意圖修改para林束,則用const修飾
7.友元函數(shù):自由獲取對象的private成員
8.相同class的各個對象互為友元像棘,可以直接拿其private成員;即壶冒,類里面的成員函數(shù)讲弄,可以直接使用同一個類的對象的私有成員,相當于成員函數(shù)可以去拿自己類的對象(包括自己和朋友)的成員依痊。
五:操作符重載與臨時對象
1.所有的成員函數(shù)一定帶著一個隱藏的參數(shù):this,在某個位置(編譯器決定)
2.創(chuàng)建臨時對象:typename();臨時對象的生命周期只在使用的哪一行,所以必須立即返回怎披,return typename();返回臨時對象時胸嘁,一定要return by value;
3.操作符重載分為成員函數(shù)重載(作用在左邊,左邊作為操作符重載的隱藏參數(shù))凉逛、全局函數(shù)重載性宏;‘<<’操作符只能全局重載,因為其發(fā)起者為cout状飞;為了能夠連續(xù)輸出毫胜,所以必須返回ostream &;std中的Cout是ostream對象书斜;
4.優(yōu)良的編程習慣:類的數(shù)據(jù)放在private,成員函數(shù)主要放在public;構造函數(shù)使用成員初值列;考慮函數(shù)要不要用const修飾;參數(shù)的傳遞盡可能的pass by reference,同時要考慮需不需要const酵使;函數(shù)返回的時候荐吉,考慮return by value還是return by reference;小的函數(shù)考慮inline,內聯(lián)的成員函數(shù)一定要放在類本體.h文件定義口渔,否則編譯器無法完成替換样屠;