c++ - 制作不同子类实例的 vector

标签 c++ oop class abstract

尝试搜索,没有返回(我认为)。

是否可以制作一个抽象类的 vector ?

例如,我有父类(super class) Unit。

我有士兵、车辆和轰炸机子类。

但是我想要一个 vector 中的任何子类的实例,例如 vector UnitList 可以包含士兵和车辆的实例吗?

这可能吗? 如果有帮助,我会使用 C++。

最佳答案

是的,但是您需要使用指针或智能指针(我会选择这个)。

struct X
{
    virtual ~X() {}  //<--- as pointed out in the comments
                     // a virtual destructor is required
                     // for correct deletion
    virtual void foo() = 0;
};
struct Y : X
{
    virtual void foo() { }
};

int main()
{
    std::vector<X*> a;
    a.push_back(new Y);
    a[0]->foo();
    for ( int i = 0 ; i < a.size() ; i++ )
        delete a[i];
    return 0;
}

不要忘记删除分配的内存。

为什么不能使用实际对象:

假设std::vector<X> .这是非法的,因为:

  1. 如果您想用一定数量的元素初始化 vector ,分配将会失败。 vector 将对象内部存储在连续内存中。预分配会失败,因为这意味着它需要创建对象,而抽象类不能这样做。

  2. 即使您可以,或者基类不是抽象的,也无济于事,因为您会遭受对象切片的困扰。

关于c++ - 制作不同子类实例的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10338548/

相关文章:

c++ - 增加两个功能

c++ - 在 C++ 中获取类对象的地址?

c++ - 使用 Qt 5.4 添加 iOS 应用程序的设置条目

c++ - int/counter 的奇怪行为

使用 cout 的 C++ 设置列

c++ - 如何从 STL 修改 std::valarray 类?

swift - Swift 协议(protocol)中的静态类型属性

python - QDateEdit对象没有属性 "setText"

c++ - 如何用不同类的对象填充类中的 vector

C# : Mini Application Structural Design (Classes/Interfaces/etc. )