C primer 要點總結

2021-06-08 06:39:52 字數 2369 閱讀 7588

1. private和protected型別的資料成員或成員函式,不能被物件直接引用。包括建構函式

2. static成員函式只能操作static資料成員,它沒有this指標

3. static資料成員在類內宣告,但必須在類外定義並且初始化,且定義不能標示為static。

4. 單參的建構函式可以視為到該類型別的隱式轉換,乙個好的習慣是用explicit關鍵字來阻止這種隱式轉換,並在需要轉換時顯式呼叫建構函式

5. 如果定義了乙個建構函式,則不會再生成合成的預設建構函式。好的習慣是自己定義預設建構函式,以防止以後使用不方便。無參的建構函式和有預設實參的建構函式都是預設建構函式。(如果兩者都定義會引起二義性)

6. 任何const資料成員、引用型別資料成員和沒有預設建構函式的類型別成員都必須用初始化式來進行初始化,因為它們不支援賦值。

7. 建構函式分兩個階段執行,初始化階段和普通的計算階段。不管成員是否在建構函式初始化列表中顯式初始化,類型別的資料成員總是在初始化階段初始化。初始化發生在計算階段之前。

8. 基於成員函式是否為const可以過載乙個成員函式。同樣,基於乙個指標形參是否指向const(注意不是const型別指標)可以過載乙個成員函式。const物件只能使用const成員。

9. this指標是乙個指向類型別的const指標。

10. 只有單個形參,且該形參是對本類型別物件的引用,這樣的建構函式稱為複製建構函式。

11. 對於類型別物件,初始化的複製形式和直接形式有所不同:直接初始化直接呼叫與實參匹配的建構函式,複製初始化總是呼叫複製建構函式。複製初始化首先使用指定建構函式建立乙個臨時物件,然後用複製建構函式將那個臨時物件複製到正在建立的物件。對於類型別,只有指定單個實參或顯式建立乙個臨時物件用於複製時,才使用複製初始化。

12. 複製控制,通常包括複製建構函式,賦值操作符和析構函式。通常它們會自動合成,如果其中有乙個需要自定義則其他的也需要自定義。需要自定義的情況一般是類中有資料成員是指標或引用型別。

13. 當複製建構函式被private修飾時,禁止複製。

14. 在操作符過載中,對函式呼叫操作符()的過載比較特殊。定義了呼叫操作符的類,其物件常稱為函式物件,即它們是行為類似函式的物件。其優點參考c++ primer p450(函式物件常用作通用演算法的實參)

15. 轉換操作符是一種特殊的類成員函式也是特殊的過載,它定義將類型別值轉變為其他型別值的轉換。operator+目標型別,必須為成員函式且不能有返回值。一般而言,不允許轉換為陣列或函式型別,轉換為指標型別及引用型別是可以的。

16. 注意,只能應用一次類型別轉換

17. 當有多個過載函式存在時,如何進行引數匹配是乙個問題,當有2個以上的函式匹配優先順序一樣的時候,會產生二義性。

18. 當兩個類定義了相互轉換時,可能存在二義性。要避免編寫互相提供隱式轉換的成對的類。避免二義性最好的方法是,保證最多只有一種途徑將乙個型別轉換為另一型別。做到這一點,最好的辦法是限制轉換操作符的數目。

19. 繼承層次的根類一般都要定義虛析構函式。

20. 介面繼承與實現繼承,public派生類繼承基類的介面,它具有與基類相同的介面。設計良好的類層次中,public派生類的物件可以用在任何需要基類物件的地方。使用private或protected派生的類不繼承基類的介面,相反,這些派生通常被稱為實現繼承。

21. static const型變數需要在類中初始化,但不需要在初始化列表中初始化。

22. 盡量不在標頭檔案中對命名空間進行using操作,以免命名空間汙染。盡量在標頭檔案中少包含標頭檔案

23. 在switch語句內,在第乙個case前面的語句將會被忽略。在case中可以進行變數宣告等操作,但必須用大括號括起。

24. 虛繼承的時候最底層的派生類建構函式需要負責初始化虛基類,無論虛基類出現在繼承層次中的任何地方,總是在構造非虛基類之前構造虛基類

25. 盡量避免使用虛繼承和菱形繼承

26. 每乙個non-inline member function只會誕生乙個函式實體,而inline function則會在每乙個使用者身上產生乙個函式實體

27. c++在布局以及訪問時間上主要的額外負擔是由virtual引起的

28. 每乙個class 產生出一堆指向相關的virtual functions的指標,放在**之中。這個**被稱為virtual table(vtbl)。每乙個class object被新增了乙個指標,指向相關的virtual table。通常這個指標被稱為vptr。vptr的設定和重置都由乙個class的建構函式,析構函式和複製操作符自動完成。每乙個class所關聯的type info object(型別資訊,用以支援rtti)也經由virtual table被指出來,通常是放在**的第乙個slot處。

29. c++中凡處於同乙個access section的資料,必定保證以其宣告次序出現在記憶體布局當中。然而被放置在多個access sections中的各筆資料,排列次序就不一定了。

C primer知識要點總結 1

型別的概念 定義了資料元素的內容,還定義了這類資料上可以操作的運算。endl的作用 endl是操作符的特殊值。寫入endl的效果是結束當前行,並將於裝置關聯的緩衝區的中內容刷到裝置中。緩衝重新整理操作可以保證目前為止程式所產生的的所有輸出都真正寫入輸出流中,而不是僅停留在記憶體中等待寫入流。練習1....

c primer 要點 函式

1.當用實參初始化形參時會忽略掉頂層const void fun const int i void fun int i 錯誤 重定義 底層const是可以過載的。2.在不同的作用域中無法過載函式名,而是隱藏。因為在c 語言中,名字查詢發生在型別檢查之前,所以內層作用域的會名字隱藏外層作用域,不分函式...

c primer要點 標準庫

1.謂詞是乙個可呼叫的表示式,其返回結果是乙個能用作條件的值。2.lambda表示式 capture list parameter list return type 捕獲列表只用於區域性非靜態變數,獲變數的值在lambda建立時拷貝 隱式捕獲 在捕獲列表中寫乙個 值捕獲 或 捕獲引用 由編譯器推斷要...