我想用一个虚函数扩展一个抽象基类,并将函数名称保持为虚拟,但在“可能”重写的子函数之前和之后运行代码。你可以重写同一个类中的纯虚函数吗?
下面是一个例子:
我对事物的基类(接口),可以得出:
class IDraw {
public:
virtual void do_draw(Screen *scr) = 0;
};
我想保持这种接口在子类中,并能够覆盖它, 例如我有一个游戏,其中清洁所述屏幕的一类,绘制的东西,并比翻转显示缓冲器:
class Game : public IDraw {
public:
// Keep the interface
// This can be overridden by sub classes
virtual void do_draw(Screen *scr) = 0; // (1)
private:
// But override the base class so if s.b. calls
// do_draw from a IDraw pointer it executes this!
void IDraw::do_draw(Screen *scr) override; // (2)
};
// Implementation of (2)
void Game::IDraw::do_draw(Screen *scr) {
// Do stuff before like clear the screen
scr->clear();
// Call the method supplied by childs
this->do_draw(scr); // (1)
// Present the drawing
scr->present();
}
由于我有代码之前和之后由孩子提供的功能我不能简单地重写使其保持虚拟,因为孩子必须决定是否在之前或之后调用Game :: do_draw()//(2)。
我知道我可以简单地用不同的名称调用函数(2),但是因为我需要很多类来做这种事情,所以它会以相同概念的大量名字结尾。
有没有办法在C++ 11中做这种事情?
不可以。您不能用不同的名称覆盖功能。 – SergeyA