我在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/

10-11 03:32
查看更多