参考:
http://blog.csdn.net/hackbuteer1/article/details/7558868
虚函数
比如:virtual void function1();
virtual关键字修饰的成员函数,就是虚函数。
把基类的成员函数设为virtual,其派生类的相应的函数也会自动变为虚函数。
指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。
纯虚函数
比如:virtual void function1()=0;
含有纯虚拟函数的类称为抽象类,它不能生成对象。
如:
//一个带有纯虚函数的抽象类
class WorkUnit : public RuntimeInfo, public ReflectObject
{
public:
enum STATE{ORGIN, RUNNING, CANCELED,FAILED, SUCCESS}; /*job状态,一个枚举类型*/
public:
WorkUnit();
virtual ~WorkUnit();
virtual bool onBeginWork(){ return true;} //带实现的虚函数
virtual void onEndWork(){} //空实现的虚函数
virtual int doWork()=0; //纯虚函数,使类WorkUnit变为虚类,不能直接生成对象
bool isInterupted(); //普通函数
protected:
std::string m_strName; //该工作单元名
int m_iPriority; //工作单元的优先级
STATE m_cState; //枚举类型变量
}
如果要派生抽象类,而又不定义纯虚函数,子类还要保留:
virtual void function1()=0;
//派生自抽象类WorkUnit的抽象类Ruler
class Ruler: public WorkUnit
{
public:
Ruler();
virtual ~Ruler();
//纯虚函数(继承但不实现)
virtual int doWork() = 0;
//普通函数
bool parseParams(std::string & paramstr, Parameter & out);
}
//派生自抽象类Ruler的抽象类CheckRule
class CheckRule: public common::Ruler
{
public:
CheckRule();
virtual ~CheckRule();
//执行规则
virtual int doWork() = 0;//纯虚函数,继承但不实现,不能生成对象
virtual bool onBeginWork();
virtual void onEndWork();
common::ProcResManager* get_data_err_mgr();
};
纯虚函数如果不实现就得加一个virtual void function1()=0;子类要实现酒吧virtual去掉。
如果纯虚函数在子类实现了,那么子类可以生成对象:
//派生自抽象类CheckRule的非抽象类,该类用来检查“银行ATM的pio点”。
class PoiBankAtm : public CheckRule
{
int find_str_from_vector(const std::vector<std::string> & str_vec, const std::string & key);
int check_bank_atm(const std::string & str_src, std::string & str_dst);
public:
int doWork(){/*具体实现方法*/};
};