C++ 对象类型数组包含子对象

c++ object type array contains subobject

我有 Java 使用接口和对象的代码。但是我不能用 C++ 编写它。你能帮我一下吗?

有一个名为Operation.java的接口,这是代码。

public interface Operation {
    int evaluation(int x, int y); 
}

有一个名为 Multiply.java 的 class 实现操作 class 这是代码。

public class Multiply implements Operation {
  public int eval(int x, int y) {
    return = x*y;
  }
}

还有一个名为 Summation 的另一个 class 实现操作 class 这是代码。

public class Add implements Operation {

public int eval(int x, int y) {
    return = x+y;
}

最后,它声明了这个数组。

private static final Operation[] OPERATIONS = {new Multiply(), new Summation()};

在这里,我尝试用 C++ 编写这段代码。但是我对 C++ 的 OOP 没有很深的了解。我完全理解 Java 代码,但我不会用 C++ 编写。你能帮忙吗。

谢谢。

首先你应该知道在 C++ 中我们没有接口关键字或其他东西。但是 java 中的接口类似于具有纯虚函数的 c++ class

class Operation
{
public:
  virtual int eval(int x, int y) = 0; 
}

这很像接口,现在每个 class 继承 Operation 都必须执行评估。在 C++ 中,与 java 不同,我们有多重继承。

现在您可以编写如下代码:

class Multiply: public Operation {
public:
  int eval(int x, int y) override {
    return x*y;
  }
}

注意:override 关键字很重要。

然后你可以写:

Operation* a = new Multiply();

但还要注意,您可以将 OOP 代码转换为 C++ 世界中的简单函数代码。

等等..

鉴于您的最终目标似乎是调用这些东西,我可能建议首先不要创建对象。 C++(以及 Java 的最新版本)具有 first-class 函数,这意味着您可以编写函数并将它们像对象一样免费对待。

#include <vector>
#include <functional>

int add(int x, int y) {
  return x + y;
}

int multiply(int x, int y) {
  return x * y;
}

int main() {
  std::vector<std::function<int(int, int)>> arr { add, multiply };
}