淺談C++類(一)

類的基本思想是數據抽象

封裝。數據抽象是一種依賴於接口實現分離的編程技術。

一、定義抽象數據類型

1、 設計Sale_data類

淺談C++類(一)

a. 定義成員函數

如上圖所示,成員函數體可以定義在類外,也可以定義在類內(isbn函數),isbn函數 如何獲得bookNo成員所依賴的對象呢?

b. 引入this

調用isbn函數時,如:total.isbn(),當isbn返回bookNo時,實際上返回的是 total.bookNo。

成員函數通過一個名為this的額外的隱式參數來訪問調用它的那個對象。

當調用total.isbn()時,則編譯器將total的地址傳遞給隱式形參this

isbn函數可以寫為std::string isbn() const {return this->bookNo}

this是一個常量指針。

c. 引入const成員函數

isbn中另一個關鍵是,緊隨參數列表後的const關鍵字,這裡const 的作用是

修改隱式this指針的類型。

默認情況下,this的類型是指向類類型的非常量的常量指針。即,在默認情況下我們不可以將this綁定到一個常量對象上。在isbn函數體內不會改變this所指的對象,所有將this 設置為指向常量的指針有助於提高函數的靈活性。因為this是指向常量的指針,所以常量成員函數不能改變調用它的對象的內容。

2、類的外部定義成員函數

淺談C++類(一)

avg_price函數便是定義在了Sale_data類的外部。

在類外部定義成員函數,①成員函數的定義必須與類內的聲明一致。②外部定義的成員函數必須包含它所屬的類名。

函數名Sale_data::avg_price使用了作用域運算符,因此當avg_price使用revenue 和units_sold時,實際上隱式的使用了Sale_data的成員。

3、 定義一個返回this對象的函數

淺談C++類(一)

當total.combine(trans)時,total 的地址綁定到this,trans的地址綁定到rhs。

當執行units_sold+=rhs.units_sold;語句時等同於:

求total.units_sold 和trans.units_sold的和,然後將結果保存到total.units_sold中。

Note:定義的函數類似於某個內置運算符時,應令該函數的行為儘量模仿這個運算符,內置的賦值運算符把它的左側運算對象當作左值返回。

因為此時的左側運算對象為Sale_data的對象,所以返回類型為Sale_data&。

return *this;返回total 的引用。


分享到:


相關文章: