C++學習筆記 – 類

來源:互聯網
上載者:User

1. 常成員函數的const必須出現在聲明和定義中。

2. 類的成員函數只能重載本類的其它成員函數,成員函數與類外的非成員函數、其它類的成員函數無關。

3. 類內部定義的成員函數,自動作為inline處理。

4. 在成員函數的聲明和定義處指定inline都是合法的,任選一個位置都行。但是由於inline函數必須在調用它的每個源檔案中可見,所以不在類定義中定義的inline函數,其定義通常應放在類定義的同一標頭檔中。

5. 類的聲明是一個不完全類型,不知道類的具體細節,所以不能定義該類的對象,只能定義指標、引用,用於聲明形參、傳回型別。所以類中不能定義該類的對象作為資料成員,只能是指標或引用。

6. 在成員函數內部顯式引用this通常是不必要的,但有一種情況下必須這樣做:當我們需要將一個對象作為整體引用而不是引用對象的一個成員時。最常見的情況是該函數返回對調用該函數的對象的引用。( ClassA & ClassA::doit() { return *this; } )

7. 非常成員函數中this是指向類類型的const指標,可以改變this指向的值,不可改變this儲存的地址。在常成員函數中this是指向const類類型對象的const指標,既不能改變this指向的對象,也不可改變this儲存的地址。不能從常成員函數返回指向類對象的普通引用,聲明函數的時候必須是const的引用。返回引用的好處是可以將一系列操作串起來( a.b().c().d(); )。但b有可能是常成員函數,而c不是。則在const對象上調用非常成員函數是行不通的。解決辦法是重載b,一個是const的,一個不是const的。

8. 有時希望類的資料成員在常成員函數中也可以被修改,可以把這個資料成員聲明為可變資料成員,只需要將mutable放到聲明前面。

9. 建構函式不能是const的。建構函式的工作是初始化對象,不管對象是否為const。

10. 必須在初始化列表中進行初始化的成員:a)沒有預設建構函式的類類型成員,b)const成員,c)參考型別成員。

11. 初始化列表的順序並不是成員被初始化的順序,而是定義成員的順序。

12. 可以傳形參的運算式給初始化列表中的初始化式( X(int v) : i(v), j(v*v) {} )。

13. 類通常應該定義一個預設建構函式,在預設建構函式中給成員提供的初始值應該指出該對象是空的。

14. 待用資料成員可以聲明為任何類型,常量、引用、數組、類類型等。必須在類定義體的外部定義,靜態成員不是普通成員,不能在建構函式中初始化,而是在定義時初始化。但當是static const int時,可以在類定義體中進行初始化,不過仍必須在類的定義休之外進行定義。

15. 靜態成員函數不是任何對象的組成部分,所以不能被聲明為const。靜態成員函數也不能聲明為虛函數。

16. 在類外部定義待用資料成員、靜態成員函數時,無須重複指定static保留字。

17. 如果類定義中有自訂的建構函式,則編譯器不會提供預設建構函式。但是就算有自訂的建構函式,編譯器也會提供複製建構函式。

18. 為了禁止複製,必須顯式聲明複製建構函式為private。因為如果不寫編譯器會合成一個預設的。

19. 如果類沒有定義自己的賦值操作符,編譯器會產生一個。可以使用合成複製建構函式的類通常也可以使用合成賦值操作符,如果類需要定義複製建構函式,那麼它也需要定義賦值操作符,要將這兩個操作看成一個單元,如果需要其中一個,肯定也需要另外一個。

20. 許多類並不需要顯式解構函式,解構函式通常用於釋放在建構函式或對象生命期擷取的資源。

21. 如果類需要解構函式,則它也需要賦值操作符和複製建構函式。

22. 與複製建構函式或賦值操作符不同,編譯總是會為我們合成一個解構函式,即使我們自己已經寫了一個,合成解構函式仍然運行。合成解構函式按成員在類中聲明次序的逆序銷毀每個非靜態成員。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.