spi*_*rap 2 c++ java polymorphism
我正在努力克服C++中看似简单的任务.我正在尝试实现基本的OOP多态性.
考虑这个Java示例:
interface Bob
{
void foo();
}
class ActualBob implements Bob
{
void foo()
{
/* I like foo things */
}
}
class Jane
{
Bob bob;
}
Run Code Online (Sandbox Code Playgroud)
简可以有任何鲍勃,很容易:
Jane jane = new Jane();
jane.bob = new ActualBob();
jane.bob.foo(); // actualbob things
Run Code Online (Sandbox Code Playgroud)
现在,在C++中,这似乎有点涉及......我需要输入什么来获得上述行为?
换句话说,我想有一个抽象基类的成员变量,但是想用它们做实际的实现.
class Bob
{
public:
virtual void foo() = 0;
}
class ActualBob : public Bob
{
public:
void foo(){/* I like foo things */}
}
class Jane
{
public:
Bob bob;
}
Run Code Online (Sandbox Code Playgroud)
在这里采取捷径,但我想用C++做:
jane.bob.foo(); // does ActualBob things
Run Code Online (Sandbox Code Playgroud)
另外,我可以有一个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;
}
Run Code Online (Sandbox Code Playgroud)
在这里采取捷径,但我想用C++做:
Run Code Online (Sandbox Code Playgroud)jane.bob.foo(); // does ActualBob things
你可以这样做:
jane.bob->foo(); // does ActualBob things, if `bob` is a pointer to ActualBob
Run Code Online (Sandbox Code Playgroud)
另外,我可以有一个
std::vector<Bob>包含ActualBob实例吗?
是的,通过一些修改,你可以拥有std::vector<Bob*>(但你必须自己释放内存),或者更好的是,一些智能指针,如std::vector<std::unique_ptr<Bob>>.