成員變量
每個類可以沒有成員,也可以定義多個成員,成員可以是數據、函數或類型別名。
一個類可以包含若干公有的、私有的和受保護的部分。在 public 部分定義的成員可被使用該類型的所有代碼訪問;在 private 部分定義的成員可被其他類成員訪問。protected可以被子類訪問。
構造函數
與類同名,且沒有返回值的函數,用於構造一個對象。
一般使用一個初始化列表來初始化數據成員,如下:
Sales_item() : units_sold(0),revenue(0.0){}
成員函數
在類內部,聲明成員函數是必需的,而定義成員函數則是可選的。
在類內部定義的函數默認為 inline。
在類外部定義的成員函數必須指明它們是在類的作用域中。Sales_item::avg_price 的定義使用作用域操作符來指明這是Sales_item 類中 avg_price 函數的定義。
將const加加到形參表之後,就可以變為常成員函數,在該函數內不能修改成員變量的值,如: double avg_price() const;
const必須出現在聲明和定義中,若出現一處,就會出現一個編譯時錯誤。
ps:const成員函數可以區分重載函數
Ø 顯示指定inline成員函數
可以在類定義體內部指定一個成員為 inline,作為其聲明的一部分。或者,也可以在類定義外部的函數定義上指定 inline。在聲明和定義處指定 inline都是合法的。在類的外部定義 inline 的一個好處是可以使得類比較容易閱讀。像其他 inline 一樣,inline 成員函數的定義必須在調用該函數的每個源文件中是可見的。不在類定義體內定義的inline成員函數,其定義通常應放在有類定義的同一頭文件中。
Ø 定義一個類
class Test{
}; //注意分號不能少
聲明一個類
class Test; //叫前向聲明
Ø 因為只有當類定義體完成後才能定義類,因此類不能具有自身類型的數據成員。然而,只要類名一出現就可以認為該類已聲明。因此,類的數據成員可以是指向自身類型的指針或引用,如下:
class LinkScreen {
Screen window;
LinkScreen *next;
LinkScreen *prev;
};
Ø 類的定義分號結束。分號是必需的,因為在類定義之後可以接一個對象定義列表。定義必須以分號結束:
class Sales_item{ /* ... */ };
class Sales_item{ /* ... */ } accum, trans;
Ø 隱含的this指針
成員函數具有一個附加的隱含形參,即指向該類對象的一個指針。這個隱含形參命名為 this,與調用成員函數的對象綁定在一起。成員函數不能定義this 形參,而是由編譯器隱含地定義。成員函數的函數體可以顯式使用 this 指針,但不是必須這麼做(比如return *this;)。如果對類成員的引用沒有限定,編譯器會將這種引用處理成通過 this 指針的引用。
Ø const 成員函數返回*this
在普通的非 const 成員函數中,this 的類型是一個指向類類型的 const指針。可以改變 this 所指向的值,但不能改變 this 所保存的地址。在 const 成員函數中,this 的類型是一個指向 const 類類型對象的const 指針。 既不能改變 this 所指向的對象, 也不能改變 this 所保存的地址。
****不能從 const 成員函數返回指向類對象的普通引用。const 成員函數只能返回 *this作為一個 const 引用。****