我如何递归访问不同的类?

时间:2011-03-03 07:42:44

标签: c++ class recursion

我希望有一组可互换的类来对数据集执行操作。我“想”我想做的事情叫做多态,但我不确定。

这是我正在尝试做的一个例子。我想创建一个包含初始值的对象,然后初始化另一个类以使用第一个类中的数据并使用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();
}

1 个答案:

答案 0 :(得分:3)

您的说明听起来似乎可能需要检查以下设计模式:Chain of Responsibility

我可能会想出这样的事情:

  • 命令接口/抽象基类
  • 调用
  • 的公共方法exec(非虚拟!)
  • 受保护的抽象虚拟方法execLocal,用于实现您正在寻找的行为。

现在,exec可以定义为:

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