java - 简单 Java 多态性的 C++ 等价物

标签 java c++ polymorphism

我正在为一项看似简单的 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 contains ActualBob instances?

是的,通过一些修改,您可以得到 std::vector<Bob*> (但你必须自己释放内存)或者,更好的是,一些智能指针,比如 std::vector<std::unique_ptr<Bob>> .

关于java - 简单 Java 多态性的 C++ 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34559763/

相关文章:

c++ - 计算文本 OpenCV 的偏斜

C++在构造函数中更改类型?

c++ - 具有重载数据成员、构造函数和运算符的抽象基类

java - 仅在 jUnit 的情况下获取 java.lang.NoSuchMethodException : io. jsonwebtoken.impl.crypto.MacProvider.generateKey

java - Primeagechecker 的空值

java - ZK 7.X中如何订阅KeyEvent

c++ - 执行速度太快后,工作线程永久休眠

java - 使用 Object.wait(milliseconds) 模拟 sleep

c++ - Awesomium alert() 处理和缺少字符集

c# - C#泛型是如何实现的?