[008]C/C++系列 | 繼承&虛函數

一、定義

  1. non-virtual函數:你不希望derived class重新定義(override,覆蓋)它
  2. virtual函數:你希望derived class重新定義(override,覆蓋)它,且已有默認定義
  3. pure virtual函數:你希望derived class重新定義(override,覆蓋)它,對它沒有默認定義

 

二、例子1

class Shape {
public:
    virtual void draw() const = 0; // pure virtual
    virtual void error(const std::string& msg); // virtual
    int objectID() const;  // non-virtual
    ...
};

class Rectangle:public Shape{...};
class Ellipse:public Shape{...};

 

三、經典用法(Template Method) 

 

四、例子2

#include <iostream>
using namespace std;

class CDocument
{
public:
    void OnFileOpen()
    {
        // 這表示一個算法,每個count輸出代表一個實際動作
        cout<<"dialog..."<<endl;
        cout<<"check file status..."<<endl;
        cout<<"open file..."<<endl;
        Serialize();
        cout<<"close file..."<<endl;
        cout<<"update all views..."<<endl;
    }
    virtual void Serialize() { };
};
class CMDoc : public CDocument
{
public:
    virtual void Serialize()
    {
        cout<<"CMDoc::Serialize()"<<endl;
    }
};
int main()
{
    CMDoc mydoc;   
    mydoc.OnFileOpen();
}

 

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