我正在为一项看似简单的 C++ 任务而苦苦挣扎。我正在尝试实现基本的 OOP 多态性。
考虑这个 Java 示例:
interface Bob
{
void foo();
}
class ActualBob implements Bob
{
void foo()
{
/* I like foo things */
}
}
class Jane
{
Bob bob;
}
Jane 可以拥有任何 Bob,easypeasy:
Jane jane = new Jane();
jane.bob = new ActualBob();
jane.bob.foo(); // actualbob things
现在,在 C++ 中,这似乎更加复杂…… 我必须输入什么才能获得上述行为?
换句话说,我想要一个抽象基类的成员变量,但又想用它们做实际实现的事情。
class Bob
{
public:
virtual void foo() = 0;
}
class ActualBob : public Bob
{
public:
void foo(){/* I like foo things */}
}
class Jane
{
public:
Bob bob;
}
这里走捷径,但我想在 C++ 中这样做:
jane.bob.foo(); // does ActualBob things
还有,我可以要一个std::vector<Bob>
吗?其中包含 ActualBob
实例?
最佳答案
使用指针,智能指针,像这样:
class Bob
{
public:
virtual void foo() = 0;
}
class ActualBob : public Bob
{
public:
void foo() override {/* I like foo things */}
}
class Jane
{
public:
std::unique_ptr<Bob> bob;
}
Taking shortcuts here, but I'd like to do, in C++:
jane.bob.foo(); // does ActualBob things
你可以这样做:
jane.bob->foo(); // does ActualBob things, if `bob` is a pointer to ActualBob
Also, can I have a
std::vector<Bob>
which containsActualBob
instances?
是的,通过一些修改,您可以得到 std::vector<Bob*>
(但你必须自己释放内存)或者,更好的是,一些智能指针,比如 std::vector<std::unique_ptr<Bob>>
.
关于java - 简单 Java 多态性的 C++ 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34559763/