Base类和继承类的集合

时间:2017-06-23 15:33:41

标签: c++ c++11 inheritance

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

    class Pet{
    //
};

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

int main(
        set<Pet> a;

        set<Pet*> b;
)

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

同样,如果我复制了set a,那么Cat,Dog的复制构造函数是否会被调用它们各自类型的项目?

1 个答案:

答案 0 :(得分:0)

在集a中,您只能存储Pet,不存储CatDog。因此,复制构造函数问题无关紧要。

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

你可能想要的是set<unique_ptr<Pet>>。你将无法复制它。

如果您确实要复制多态对象,请查看clone idiom