6

これが取引です。私は大きなクラス階層を持っており、この 1 つのメソッドをずっと拡張しています。メソッドは常に、新しいレベルごとに 1 つまたは 2 つの変数を調べる必要があり、これらの変数は階層内の実際のクラスに依存します。私がやりたいことは、これら 2 つの余分な変数をチェックしてから、同じ関数のスーパークラスのバージョンを呼び出すことです。直接の子がすべて使用するので、この関数を定義できるようにしたいのですが、そのクラスのすべての子がそのメソッドを再定義する必要があるようにしたいです (新しいデータメンバーを確認する必要があるため)。

では、これをどのように書けばよいでしょうか。私は通常 =0; を使用します。.hファイルに含まれていますが、それを使用して定義することはできないと思います...

4

2 に答える 2

9

実際には、関数を純粋に仮想として宣言し、基本クラスでその実装を定義することができます。

class Abstract {
public:
   virtual void pure_virtual(int x) = 0;
};

void Abstract::pure_virtual(int x) {
   // do something
}


class Child : public Abstract {
    virtual void pure_virtual(int x);
};

void Child::pure_virtual(int x) {
    // do something with x
    Abstract::pure_virtual();
}
于 2008-12-07T23:52:11.110 に答える
9

純粋仮想関数の定義を提供できます。詳細については、 GotW #31を確認してください。

于 2008-12-07T23:52:19.783 に答える