当前位置:  开发笔记 > 编程语言 > 正文

C++相当于简单的Java多态

如何解决《C++相当于简单的Java多态》经验,为你挑选了1个好方法。

我正在努力克服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实例吗?



1> vladon..:

使用指针,智能指针,如下所示:

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;
}

在这里采取捷径,但我想用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>.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有