我想用一個虛函數擴展一個抽象基類,並將函數名稱保持爲虛擬,但在「可能」重寫的子函數之前和之後運行代碼。你可以重寫同一個類中的純虛函數嗎?
下面是一個例子:
我對事物的基類(接口),可以得出:
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