天天看點

C++primer_第七章_類_學習跟蹤

1.        類成員函數的聲明必須在類的内部,它的定義既可以在類的内部也可以在類的外部;

2.        定義在類内部的函數是隐式的inline函數

3.        緊跟在參數清單後面的const表示this是一個指向常量的指針;

4.        常量對象,以及常量對象的引用和指針都隻能調用常量成員函數;

5.        編譯器分兩步處理類:首先編譯成員函數的聲明,然後才輪到成員函數體;

6.        在類外部定義成員函數的成員名字必須包含它所屬的類名;

7.        IO類屬于不能被拷貝的類型,是以我們隻能通過引用來傳遞它們

8.        如果定義在塊中的内置類型或複合類型的對象被預設初始化,則它們的值是未定義的。該準則同樣适用于預設初始化的内置類型成員,是以,含有内置類型或複合類型的成員的類應該在類的内部初始化這些成員,或者定義一個自己的預設構造函數;

9.        當某個資料程媛媛被構造函數初始值清單忽略時,它将以與合成預設構造函數相同的方式隐式初始化;

10.    如果編譯器不支援類内初始值,則所有構造函數都應該顯示地初始化每個内置類型的成員;

11.    當類需要配置設定類對象之外的資源時,合成版本的拷貝、指派與銷毀操作通常會失效。然而,如果類包含vector或者string成員,則其拷貝、指派和銷毀的合成版本能夠正常工作;

12.    類可以允許其他類或者函數通路它的非公有成員,方法是令其它類或函數成為它的友元。如果一個類想把一個函數作為它的友元,隻需要在類内增加一條以friend關鍵字開始的函數聲明語句即可;

13.    友元的聲明僅僅指定了通路的權限,而非一個通常意義上的函數聲明,必須在友元聲明的函數之外再專門對函數進行一次聲明;

14.    友元函數通過傳入的待通路的類對象的引用以及成員通路運算符“.”通路對象的非公有成員;

15.    類中用來定義類型的成員必須先定義後再使用。是以,類型成員通常出現在類開始的地方;

16.    類的可變資料成員(即用mutable修飾的成員)永遠不會是const,即使它是const對象的成員;

17.    當我們提供一個類内初始值時,必須以符号=或者花括号表示;

18.    一個const成員函數如果以引用的形式傳回*this,那麼他的傳回類型将是常量引用;

19.    通過區分成員函數是否是const的,我們可以對其進行重載;

20.    友元函數能定義在類的内部,這樣的函數時銀式内聯的;

21.    如果一個類想把一組重載函數聲明成他的友元,它需要對這組函數中的每一個都分别聲明;

22.    友元聲明的作用是影響通路權限,它本身并非普通意義上的聲明;

23.    當成員函數定義在類的外部是,傳回類型中使用的名字都位于類的作用域之外。這時,傳回類型必須指明它是哪個類的成員;

24.    編譯器處理完類中的全部聲明後才會處理成員函數的定義,是以成員函數能處理類中的任何名字。但這種處理方式隻适用于成員函數中使用的名字。聲明中使用的名字,包括傳回類型或者參數清單中使用的名字,都必須在使用前確定可見;

25.    類型名的定義通常出現在類的開始處,這樣就能確定所有使用該類型的成員都出現在類名的定義之後;

26.    ::表示外層作用域

27.    如果類的成員是const或者引用的話,必須通過構造函數的初始值将其初始化。類似的,當成員屬于某種類類型且該類沒有定義預設構造函數時,也必須将這個成員初始化。這是因為當構造函數體一開始執行時,初始化就完成了;

28.    構造函數初始值清單中的成員的初始化順序與他們在類定義中出現的順序一緻,并非按清單中出現的順序進行初始化的,這一點需要注意;

29.    委托構造函數使用它所屬的類的其他構造函數執行它自己的初始化過程,其中參數清單必須與淚痣另外一個構造函數比對;

30.    能通過一個實參調用的構造函數定義了一條從構造函數的參數類型向類類型隐式轉換的規則,同時可以通過将構造函數聲明為explicit加以阻止;

31.    隻能在類内聲明構造函數時使用explicit關鍵字,在類外部定義時不應該重複;

32.    靜态資料成員可以是不完全類型,也就是說靜态資料成員的類型可以就是它所屬的類類型。

33.    靜态成員與普通成員的另一個差別就是我們可以使用靜态成員作為預設實參;

34.    必須在類的外部定義和初始化每一個靜态成員,然而,可以為靜态成員提供const證書類型的類内初始值,不過要求靜态成員必須是字面值常量類型的constexpr;

繼續閱讀