我在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;
}
你可以这样做:
jane.bob->foo(); // does ActualBob things, if `bob` is a pointer to ActualBob
是的,经过一些修改,您可以拥有一个
std::vector<Bob*>
(但是您必须自己释放内存),或者更好的是,一些智能指针,例如std::vector<std::unique_ptr<Bob>>
。关于java - 相当于C++的简单Java多态性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34559763/