2

呼び出された抽象基本クラスがBaseあり、それが呼び出された他のクラスを継承しているとしRectangleます(w/cにはx、y、w、hの属性があります)

//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

};

this を継承するすべてのクラスではBase、最初に次の短い操作を実装する必要があります。

void OtherClass1::PerformTask()
{

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

    //else, proceed with the overriden operation

    //...
}

PerformTask()、すべての実装で再度入力し直すことはありませんが、同時にオーバーライドされ、short operation最初に実行されて保持されるため、デフォルトの操作を作成できますか?

4

1 に答える 1

4

はい、これは可能です。実際のオーバーライドさPerformTaskれた関数を呼び出す非仮想関数を作成するだけです。

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

    PerformTaskImpl();
}

virtual void PerformTaskImpl() = 0;

…そしてPerformTaskImpl、派生クラスでオーバーライドするだけです。

これは実際にはかなり一般的なパターンです。

于 2013-04-21T16:25:47.963 に答える