我有一个主要的抽象类和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);
}
有没有办法制作一个可以包含所有这些元素的列表?
答案 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>());