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

How to make a list of objects which all inherit from one base class

本文关键字:继承 基类 对象 列表 一个 何创建 创建      更新时间:2023-10-16

我有一个主要的抽象类和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);
}

是否有一种方法可以使一个列表可以包含所有这些元素?

您可以创建一个基类Test指针的向量,例如:

std::vector<Test*>

如果可以的话,我建议你使用智能指针,例如:

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

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

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>());