一、定義
- non-virtual函數:你不希望derived class重新定義(override,覆蓋)它
- virtual函數:你希望derived class重新定義(override,覆蓋)它,且已有默認定義
- 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();
}