c++知識點總結

1. 基類指針能夠只想子類,子類的不能指向父類。父類能夠認爲是內結構體,子類是外結構體,和c的原則同樣,內部的能用宏替換爲外部的,而外部的只有知道內部的名稱才能找到,編譯器不知道你將採用什麼樣的繼承方式,只容許內部的只想外部,不能讓外部的指向內部。
2. 基類的析夠函數最好寫成virtual的,由於當有一個基類指針只想子類時,delete這個指針時,只會執行基類的析構函數,可能引發內存泄漏,當基類析構寫爲virtual時,會執行子類的,子類會執行父類的,
3. 當基類中有虛函數時,父類指針指向父類時,調用這個函數,編譯器會先檢查子類是否有重寫的虛構,如有則執行子類的,若沒有則執行父類的。
4. 只要有一個(至少一個)沒有函數體的virtual函數時,這樣的基類認爲是抽象類,不能實例化,子類必須實現其虛函數。
5. 當基類聲明瞭一個virtual函數後,其繼承類多態繼承這個虛函數後,在生命中無論是否寫關鍵字virutal,這個函數都是virtual的,建議寫上,固然子類的子類這個函數都是virtual的,知道永遠。
6. 基類B的public的函數,子類C隱藏了這個函數從新聲明爲virtual後,C的子類D讓B指向後,不發生多態,讓C指向後發生多態,由於是從C開始這個函數纔是virtual的的。
7. 純虛函數聲明:virtual type_of_return mem_func(...) = 0; 最後加個 ‘ =0 ’ 只要有一個這樣的函數,這個類就是抽象類,這樣的類不能實例化除非被子類多態繼承後實例化子類,在基類中也能夠寫純虛函數的函數體或者不寫,寫了後,用基類::函數名來調用。
8. 有關c++中的::     :c和c++語法相似,常常弄混,其實有天大的不一樣,c中全局函數直接調用,在c++中也能夠直接調用,可是最好的作法是加個::,注:前面沒有類名,標準的::用法是 類名::函數名,表示要實現的這個函數是屬於這個類的,不加類名的調用表示這個函數是全局函數,在一個類中調用本身的靜態函數,和其餘函數同樣,不要加::,或者用類名::函數名,
9. c++中的關鍵字explicit:
    這個關健字存在的意義在於防止隱士轉化,好比當一個類的構造有一個參數的,也有默認的構造,即沒有參數的,但是呢,一個參數的那個構造有一個默認參數,當調用沒有參數的構造函數的時候,應該調用的哪個構造呢,這令人困惑,加入explicit函數防止隱式轉化,調用哪一個一個參數並使用默認參數。
10.c++中構造函數出錯處理。
    首先構造函數是確定不能有返回值的,若是在這個構造中調用了可能失敗的函數,怎麼辦,考慮兩種辦法處理:
    1.再寫一個函數檢查是否成功,在調用除delete。
    2.用throw  try  catch機制,可是throw後不會或者不能執行類的析夠函數,在catch處執行delte和在catch塊後執行delete都不能解決內存泄漏問題,應該在throw以前調用類的析夠函數,或者用類析夠函數,或者釋放該釋放的內存。c++

相關文章
相關標籤/搜索