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 };
}
我有 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 };
}