如何创建一个从一个基类继承的对象列表

时间:2015-09-01 19:37:55

标签: c++ visual-studio list inheritance

我有一个主要的抽象类和4个子类,它们都继承自抽象类。 我想列出一个元素可能是这4个类中的任何一个的列表。

Test1.h

class Test {
public:
    Test();
    virtual void someFunc();

    void getTest();
    void setTest(int test);

protected:
    int test;
};

Test2.h:

#include "Test.h"

class Test2 : public Test{
public:
    Test2();
    void someFunc();

    int otherFunc();

};

还有Test3,Test4和Test5 ......

Source.cpp:

#include <iostream>
#include "Test1.h"
#include "Test2.h"
#include "Test3.h"
#include "Test4.h"
#include "Test5.h"

int main() {
    list<Test> testList; //does not work
    Test2 t = Test2();
    Test3 t3 = Test3();
    Test4 t4 = Test4();
    testList.push_back(t);
    testList.push_back(t4);
}

有没有办法制作一个可以包含所有这些元素的列表?

2 个答案:

答案 0 :(得分:3)

您可以制作基类Test指针的向量,例如:

std::vector<Test*>

如果可以,我宁愿建议使用智能指针,例如: :

std::vector<std::unique_ptr<Test>>

答案 1 :(得分:1)

只要您不希望列表拥有对象,就可以使用基类指针向量:

std::vector<Test*> testList;
Test2 t = Test2();
Test4 t4 = Test4();
testList.push_back(&t);
testList.push_back(&t4);

如果您希望列表拥有您需要动态分配对象的对象,则基类需要有一个虚拟析构函数,您需要记住删除指针或使用智能指针:

class Test {
public:
    virtual void someFunc();
    virtual ~Test(){}
};

std::vector<std::unique_ptr<Test>> testList;
testList.push_back(std::make_unique<Test2>());
testList.push_back(std::make_unique<Test4>());