類基礎

類的定義和聲明

最簡單地來說,類就是定義了一個新的類型和一個新的作用域。
- 類成員

每個類可以沒有成員,也可以定義多個成員,成員可以是數據,函數或類型別名。

一個類可以包含公有的,私有的和受保護的部分。
  • 構造函數

    創建一個類類型的對象時,編譯器會自動地使用一個構造函數來初始化改對象。構造函數是一個特殊的,與類同名的成員函數,用於給每個數據成員設置適當的初始值。

  • 成員函數

    在類內部,聲明成員函數是必需的,而定義成員函數是可選的。在類內部定義的函數默認爲inline。在類外部定義的成員函數必需指明他們是在類的作用域中。

    成員函數有一個附加的隱含實參,將函數綁定到調用函數的對象。trans.avg_price()就是在調用名爲trans的對象的avg_price()函數。如果trans是一個Sales_item對象,則在avg_price函數內部對Sales_item類成員的引用就是對trans成員的引用。

    將關鍵字const加在形參表之後,就可以將成員函數聲明爲常量:

    double avg_price() const;  //const成員不能改變其所操作的對象的數據成員。

    const必須同時出現在聲明和定義中。

  • 類定義的更多內容

    1.使用類型別名來簡化類:
    類可以定義自己的局部類型的名字。例如,爲std::string::size_type提供一個類型別名:

    class Screen{
    public:
    typedef std::string::size_type index;           //在類內部定義一個類型別名
    private:
    index height;
    index width;
    };

    2.顯示指定inline成員函數

    有些在類內部定義的簡單函數會自動作爲inline處理。也可以顯示地聲明爲inline。可以在類定義體內部指定一個成員爲inline,作爲其聲明的一部分。也可以在類定義體外部的函數上指定爲inline。在類的外部定義inline會使得類比較容易閱讀。

  • 類聲明與類定義

    可以聲明一個類而不定義它:

    class Screen;   //前向聲明,在程序中引入了類類型Screen;在聲明之後,定義之前,
                //類Screen是一個不完全類型,即已知Screen是一個類型,但不知道包含哪些成員。

    不完全類型只能以有限的方式使用。不能定義該類型的對象。只能用於定於指向該類型的指針和引用,或者用於聲明使用該類型作爲形參類型或返回類型的函數。

隱含的this指針

在上一部分提到,成員函數有一個附加的隱含形參,即指向該類對象的一個指針,名爲this
成員函數不能定義this形參,而是由編譯器隱式定義。成員函數可以顯示使用this指針。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章