[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();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值