纯虚函数与纯虚类

什么是纯虚函数
纯虚函数的语法
1. 将成员函;数声明为virtual
2. 后面加上=0
3. 该函数没有函数体
例如

class CmdHandler
{
    public:
        virtual void OnCommand(char * cmdline)=0;
};

含有纯虚函数的类,称为抽象类(或称纯虚类)
例如,CmdHandler中有一个纯虚函数OnCommand(),因此,它是纯虚类

抽象类不能被实例化,既无法创建该对象

CmdHandler ch;//编译错误 !!
CmdHandler * p =new CmdHandler();//编译错误!

问题:不能被实例化,还定义这个类做什么用???

抽象类/纯虚函数的实际用途,充当的“接口规范”
(相当于Java中的Interface语法)
(用于替代C中的回调函数的用法)
接口规范,凡是遵循此规范的类,都必须实现指定的函数接口,通常是一系列接口
比如

class CmdHandler
{
    publicvirtual void OnCommand(const char * cmdlin;e)=0;
}

可以理解为:凡是遵循CmdHandler规范的类,都必须实现指定的函数接口,OnCommand()

实例演示
项目需求:用户输入一行命令,按回车完成输入。要求解析命令输入,并且处理
设计:
CmdInput:用于接收用户输入
CmdHandler:规定一系列函数接口
MyParser:实际用于解析处理的类

#include "CmdInput.h"
#include "MyParser.h"
int main()
{
    CmdInput input;
    MyParser parser;
    input.SetHandler(&parser);
    input.Run();
    return 0;
}

总结:
1. 如何定义一个纯虚函数
2. 抽象类的实质作用:接口规范
因为它只代表了一个规范,并没有具体实现,所以它不能被实例化
3. 抽象类通常被多重继承
比如,一个普通的类,实现了多套接口规范,又继承于原有的父类
4. 抽象类的析构函数应该声明为virtual,因为它是被设计用于继承的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ToF君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值