天天看點

《C++面向對象高效程式設計(第2版)》——1.6 什麼不是類

本節書摘來自異步社群出版社《c++面向對象高效程式設計(第2版)》一書中的第1章,第1.6節,作者: 【美】kayshav dattatri,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

c++面向對象高效程式設計(第2版)

了解何時不能将某些部分設計成類也非常重要。将函數組合到一起是把子產品(或者把簡單的c頭檔案)轉化為類的效果,這不是真正的類。其實,隻需從子產品中取出函數,并讓它們成為公有成員函數,你就擁有了一個類!類并不僅僅是一組函數,它的含義比這多得多。

例如,考慮一個子產品,它實作一組數學函數,如開方、求幂、求倒數等。有人可能試圖(錯誤的)将這個子產品轉換為mathhelper類。

class number {

    public:

       number sqrt();

       number power(number raiseto);

       number inverse();

       number absolute();  // 計算絕對值

    private:

       // 内部表示,用于存儲數字

};<code>`</code>

在這種情況下,number類控制了數字的内部表示。因為客戶并不了解這些内部表示,是以從邏輯上講,是類提供了所需的操作。

進一步分析這個設計,我們可以構思一個繼承層次,用于代表不同類型的數字(實數、整數、複數等)。這些類型可以成為number的派生類(或子類),如圖1-4所示。

繼承将在第5章和第6章中讨論。

類似地,一個c“結構”不能直接成為一個類。不能将結構修改成類,讓所有資料成為私有資料,然後添加一組函數來獲得和設定資料成員,這不是類。類不隻是一組允許客戶擷取和設定資料成員值的函數。資料封裝隐藏了類中的資料,而且通過成員函數提供更高層次的抽象。如果隻是讓函數讀寫結構中的資料,其實并未簡化任何東西。隻包含獲值函數(getter)和設值函數(setter)的類是糟糕的設計1。

繼續閱讀