纯虚函数与纯虚类

来源:互联网 发布:linux经典书籍推荐 编辑:程序博客网 时间:2024/05/17 02:29

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

0 0
原创粉丝点击