2013-04-21 102 views
2

假設我有一個抽象基類稱爲Base和它繼承調用Rectangle其他類(W/C具有X,Y,W,H的屬性)C++繼承功能默認操作

//Base.h 

class Base abstract : public Rectangle 
{ 
public: 

    Base(); 

    void Show() 
    { 

     if (!visible) return; 

     //draw the stuff here. 

    } 

    virtual void PerformTask() = 0; 

protected: 

    bool visible; 
    bool enable; 
    //other member variables 

}; 

對於所有繼承此Base的類,它必須實現這個短期操作第一:

void OtherClass1::PerformTask() 
{ 

    if (!enable) return; // <- this one I am referring to. 

    //else, proceed with the overriden operation 

    //... 
} 
PerformTask()

,可以把它做一個默認操作,因爲我不會在所有執行重新鍵入它,但是,在同一時間,被覆蓋並且short operation被首先執行並保留?

+2

然後不要讓'Base :: PerformTask'純虛擬。 – 0x499602D2 2013-04-21 16:25:22

回答

4

是的,這是可以做到的;只是讓PerformTask它調用實際重寫功能的非虛擬函數:

// In Base: 
void PerformTask() { 
    if (not enabled) return; 

    PerformTaskImpl(); 
} 

virtual void PerformTaskImpl() = 0; 

...然後只是覆蓋在派生類PerformTaskImpl

這實際上是一個很常見的模式。

+0

我如何知道在其他人之前是否先執行了「短操作」? – mr5 2013-04-21 16:28:31

+0

@ mr5對不起,我不明白這個問題。 – 2013-04-21 16:29:36

+0

我的意思是,唯一不會被覆蓋的就是「短操作」,並將爲每個繼承它的類保留。 – mr5 2013-04-21 16:35:07