什么是纯虚函数
纯虚函数的语法
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
{
public:
virtual 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,因为它是被设计用于继承的