1
我想有一組可交換的類來對數據集執行操作。我「認爲」我想做的事叫做多態,但我不確定。如何遞歸地訪問不同的類?
這是我想要做的一個例子。我想創建一個包含初始值的對象,然後初始化另一個類以使用第一個類中的數據並使用exec執行操作,然後用另一個遞歸類重複此操作。
我想要能夠改變操作的順序,這個想法是任何類都可以調用exec(),它總是會返回unsigned long。 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();
}
不是「正是」我是怎麼想最初實施它,但這個概念更有意義,我發現這個網站http://sourcemaking.com/design_patterns/chain_of_responsibility/cpp/1,它解釋了它在C++中的實現,非常酷的設計方法,謝謝 – jeremyb 2011-03-03 09:18:43