c++ - 如何递归访问不同的类?

标签 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();
}

最佳答案

您的描述听起来您可能想要检查以下设计模式:Chain of Responsibility .

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

  • 命令接口(interface)/抽象基类与
  • 公共(public)方法exec(非虚拟!)调用
  • protected 抽象虚方法 execLocal 实现您正在寻找的行为。

现在,exec 可以定义为:

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

关于c++ - 如何递归访问不同的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5177951/

相关文章:

c++ - 在泛型编程中仅使用 < 比较

c# - 如何在 C# 中从托管 C++ DLL(使用包装类)获取字符串

c++ - c vector 可以存储多种数据类型吗?

class - Angular 2 : Create objects from a class

c++ - OO 编程 - 变量作为成员还是仅在 header 中作为全局变量?

c++ - 遍历 map 时编译出错

android - android中迷宫生成的递归划分算法

asynchronous - Nodejs Sequelize 递归异步/等待

javascript - 太多的递归

C++ 取消引用发生在隐式转换之后