異なるクラスに再帰的にアクセスするにはどうすればよいですか?

c++ class recursion
異なるクラスに再帰的にアクセスするにはどうすればよいですか?

データセットに対して操作を実行するための一連の交換可能なクラスが必要です。 私がやろうとしていることを「考える」ことはポリモーフィズムと呼ばれますが、よくわかりません。

これは私がやろうとしていることの例です。 初期値を含むオブジェクトを作成し、最初のクラスのデータを使用するように別のクラスを初期化し、execを使用して操作を実行し、別の再帰クラスでこれを繰り返します。

操作の順序を変更できるようにしたい、アイデアは、すべてのクラスが常にunsigned longを返すexec()を呼び出すことができるということです。 init()は異なる場合がありますが、初期化中に呼び出され、再帰クラス内ではアクセスされません。

ありがとう、

class operationsObject {
public:
    virtual unsigned long exec (void) =0;
};

class addObject: public operationsObject {
private:
    unsigned long valueA, valueB;
public:
    void init(unsigned long a, unsigned long b)
    {valueA = a; valueB = b;}
    unsigned long exec()
    {return valueA + valueB;}
};

class subtractObject: public operationsObject {
private:
    operationsObject *obj;
    unsigned long valueA;
public:
    void init(unsigned long a, operationsObject *o)
    {valueA = a; obj = o;}
    unsigned long exec()
    {return obj->exec() - valueA;}
};

class multiplyObject: public operationsObject {
private:
    operationsObject *obj;
    unsigned long valueA, valueB;
public:
    void init(unsigned long a, unsigned long b, operationsObject *o)
    {valueA = a; valueB = b; obj = o;}
    unsigned long exec()
    {return obj->exec() * valueA * valueB;}
};

int main(){
    operationsObject *op1 = new addObject;
    operationsObject *op2 = new subtractObject;
    operationsObject *op3 = new multiplyObject;
    op1->init(4,5);
    op2->init(4, op1);
    op3->init(1, 2, op2);
    unsigned retVal = op3->exec();
}

  1  0


ベストアンサー

説明は、http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern [Chain of Responsibility]のデザインパターンを確認する必要があるようです。

私はおそらくこのようなものを思い付くでしょう:

  • コマンドインターフェース/抽象基底クラス

  • を呼び出すパブリックメソッド exec(非仮想!)

  • 保護された抽象仮想メソッド `execLocal`は
    あなたが探している行動。

現在、 `exec`は次のように定義できます。

def exec(param):
    self.execLocal(param)
    if self.hasNext():
        self.next.exec(param)

3


タイトルとURLをコピーしました