物件導向——意圖與邏輯(四)
物件導向——意圖與邏輯
物件導向——意圖與邏輯 (二)
物件導向——意圖與邏輯(三)
物件導向——意圖與邏輯(四)
public
繼承意味著is a
(狗是動物,蘋果是水果,子類是父類)virtual
意味著介面必須被繼承non-virtual
函式意味著介面和實現都必須被繼承non-pure virtual
存在一個預設演算法(或者說父類要提供一個實現)pure virtual
則是完全客製化(customerization)override (重寫),通俗地理解就是覆蓋(新版本覆蓋舊版本);
觀察一個類,應首先觀察其成員變數,因為大部分類最終表達的仍是一個具有很多成員方法的物件的抽象,也即它是對成員變數,以及圍繞成員變數的成員方法的封裝。
在多類的、類間關係較為複雜時,進行每個類單獨的設計與實現時,腦海中應有一個 UML,它就是建築實施中的圖紙。
虛擬函式不能是靜態函式
虛擬函式(vptr:virtual pointer、vtbl:virtual table)(也包括 this 指標)都是物件(class objects)的概念;
而 static 是全體物件,是類的概念範疇,靜態函式沒有 this 指標;
C++中的get、set方法
首先一點,是類的預設構造函式會分別呼叫類成員變數的預設構造函式。
class Test
{
private:
std::vector<double> _weights;
public:
// 有點set方法的感覺
std::vector<double>& weights() { return _weights;}
// 而這是get方法
const std::vector<double>& weights() const { return _weights;}
}
int main(int, char**)
{
Test t; // 會呼叫std::vector<double> 的預設建構函式,建立_weights物件例項
std::vector<double> dvec{0., 1., 2.};
t.weights() = dvec; // 在客戶端建立,然後set
return 0;
}
如果這樣理解還算正確的話,那麼大量見諸於STL容器的兩個版本的(mutable 和 non-mutable)的成員函式的作用便可顯見。
Java/C++ 對多型的支援
Java 動態繫結,C++ 靜態繫結(預設非多型),
這句話翻譯過來即是:
父類引用指向子類物件,父類引用呼叫其子類中重寫的方法時,Java預設多型,C++ 需顯式的宣告該方法為 virtual 虛擬函式。
相關文章
- 物件導向與UML圖物件
- 物件導向與程式導向物件
- 程式導向與物件導向物件
- TypeScript與物件導向TypeScript物件
- Java物件導向——類與物件Java物件
- php中的程式導向與物件導向PHP物件
- 物件導向-物件導向思想物件
- python物件導向思想(類與物件)Python物件
- Javascript 設計模式之物件導向與 UML 類圖JavaScript設計模式物件
- 物件導向OO與DSL - typeswitch物件
- Javascript物件導向與繼承JavaScript物件繼承
- “程序導向”和“物件導向”物件
- Java語言之物件導向—類與物件(上)Java物件
- JS物件導向程式設計(四):繼承JS物件程式設計繼承
- 物件導向物件
- javaSE之物件導向思維導圖總結Java物件
- PHP 物件導向 (四)類物件賦值為引用傳遞PHP物件賦值
- 物件導向,搞定物件物件
- JAVA物件導向基礎--物件導向介紹Java物件
- PHP 物件導向 (九)物件導向三大特徵PHP物件特徵
- 物件導向分析與設計(OOAD)物件
- 圖解python | 物件導向程式設計圖解Python物件程式設計
- 《JavaScript物件導向精要》之四:建構函式和原型物件JavaScript物件函式原型
- Python物件導向Python物件
- [Java物件導向]Java物件
- Java物件導向Java物件
- Python 物件導向Python物件
- Java — 物件導向Java物件
- Python——物件導向Python物件
- 物件導向--下物件
- scala物件導向物件
- 物件導向(下)物件
- 物件導向(上)物件
- PHP物件導向PHP物件
- 物件導向 -- 反射物件反射
- JavaScript 物件導向JavaScript物件
- JS物件導向JS物件
- 物件導向(oop)物件OOP
- 1.設計模式與物件導向設計模式物件