データセットに対して操作を実行するための一連の互換性のあるクラスが必要です。私がしようとしていることは多形性と呼ばれていますが、私は分かりません。どのように再帰的に別のクラスにアクセスするのですか?
これは私がやろうとしていることの例です。最初の値を含むオブジェクトを作成し、最初のクラスのデータを使用する別のクラスを初期化し、execを使用して操作を実行してから、別の再帰クラスでこれを繰り返します。
私は操作の順序を変更できるようにしたいと考えています。どのクラスもexec()を呼び出すことができ、常にunsigned longを返すことができます。 init()は異なるかもしれませんが、初期化中に呼び出され、再帰クラス内ではアクセスされません。 Chain of Responsibility:あなたは、次のデザインパターンをチェックしたい場合がありますように
おかげで、
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();
}
、私はこのサイトにhttp://sourcemaking.comを見つけました/ design_patterns/chain_of_responsibility/cpp/1は、C++での実装を説明しています。 – jeremyb