我正在努力克服C++中看似简单的任务.我正在尝试实现基本的OOP多态性.
考虑这个Java示例:
interface Bob { void foo(); } class ActualBob implements Bob { void foo() { /* I like foo things */ } } class Jane { Bob bob; }
简可以有任何鲍勃,很容易:
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
包含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_ptrbob; }
在这里采取捷径,但我想用C++做:
jane.bob.foo(); // does ActualBob things
你可以这样做:
jane.bob->foo(); // does ActualBob things, if `bob` is a pointer to ActualBob
另外,我可以有一个
std::vector
包含ActualBob
实例吗?
是的,通过一些修改,你可以拥有std::vector
(但你必须自己释放内存),或者更好的是,一些智能指针,如std::vector
.