類的基本思想是數據抽象和
封裝。數據抽象是一種依賴於接口和實現分離的編程技術。一、定義抽象數據類型
1、 設計Sale_data類
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、類的外部定義成員函數
avg_price函數便是定義在了Sale_data類的外部。
在類外部定義成員函數,①成員函數的定義必須與類內的聲明一致。②外部定義的成員函數必須包含它所屬的類名。
函數名Sale_data::avg_price使用了作用域運算符,因此當avg_price使用revenue 和units_sold時,實際上隱式的使用了Sale_data的成員。
3、 定義一個返回this對象的函數
當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 的引用。
閱讀更多 編程語言學習 的文章