虛函數 virtual function 筆記(與繼承)----C++學習之路

  1.虛函數的概念

在語法上,只要在成員函數前加上virtual,例如:virtual void draw() const =0;

所謂繼承其實就是繼承函數的調用權。子類可以調用父函數的函數。

但是當我們子類要去修改這個函數,則要用到虛函數。


  2.虛函數的分類:

(1):non-virtual:你不希望derived class overide(重寫)。 int objectID() const; 

(2):virtual函數:你希望derived class去重新override。並且父類有默認的定義。 virtual void erro (const std::string& msg);

(3):pure virtual(純虛函數):你希望derived class一定要去重新override它,它對於子類沒有默認定義。virtual void draw(0 const = 0;




  3.關於繼承與虛函數的例子:

class Shape
{
public:
    virtual void draw() const =0;
    virtual void error(const std::sting& msg);
    int objectID()const;
    ...
};

class Rectangle: public Shape{....};
class Ellopse:public Shape{....};
這個父類是一個很抽象的“形狀”

子類可以是橢圓也可以是矩形。

不管你是橢圓還是矩形,我都給你一個ID,不需要子類去更改它,那就設置成non-virtual。

當子類操作失敗之後,我希望丟出一個錯誤代碼,讓子類去設置錯誤代碼,那就允許子類去override這個error。

draw繪製,因爲子類有不同的形狀,所以只能讓子類去定義,所以設置成pure-virtual。

  4.繼承與虛函數的案例

Teplate Method 設計模式


也就是MFC中的一段,利用Template Method,利用虛函數與繼承。


  5.爲什麼會像圖中一樣跑過去?

因爲在編譯器中是這樣的,也就是myDoc作爲this point傳入

OnFileOpen中,也就是this->Serilize().




  7.複合與繼承條件下的ctor detor




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章