【问题标题】:Set of Base class together with inherited classes基类和继承类的集合
【发布时间】:2017-06-23 15:33:41
【问题描述】:

在下面这段代码 sn-p 中,有一个 Pets 类,继承了 Cat 和 Dog 类。我想要一套我所有的宠物。

    class Pet{
    //
};

class Dog: Pet{
    //
};
class Cat: Pet{
    //
};

int main(
        set<Pet> a;

        set<Pet*> b;
)

显然,如果我使用选项 b,任何指针,狗或猫,都可以在集合中,但我不确定如何制作集合的副本。

类似地,如果我复制集合 a,是否会调用 Cat,Dog 的复制构造函数来获取它们各自类型的项?

【问题讨论】:

  • 请不要发布幻想代码。在你到达集合声明之前这不会编译,我觉得你想要公共继承而不是私有,不是吗?

标签: c++ c++11 inheritance


【解决方案1】:

在集合a 中,您只能存储Pets,不能存储Cats 或Dogs。因此,复制构造函数的问题是无关紧要的。

使用集合b,您可以自然地复制它,但该副本将包含指向相同对象的指针。更重要的是,您还需要将这些对象存储在某个地方。

您可能想要的是set&lt;unique_ptr&lt;Pet&gt;&gt;。您将无法复制它。

如果你真的想复制多态对象,请查看clone idiom

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多