虚函数与纯虚函数

参考:

http://baike.baidu.com/link?url=n54mpV7wlWJJHf0_d11se1jLK6TwnlvXktFwfDdqzhUfoaprJgiuVsrs8TEyw_88lgTVECxF737eXLgxQ3oKYK

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(){/*具体实现方法*/}; 
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值