如何创建从一个基类继承的对象列表
How to make a list of objects which all inherit from one base class
我有一个主要的抽象类和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>());
相关文章:
- C++ 继承:基类中重载 operator+ 的 2 次在派生类中无法正常工作
- 使用 "using" 关键字继承基类的复制和移动构造函数
- 获取继承基类类型的元组
- C++:继承基类方法
- 当我们想要私下继承基类时,为什么要进行名称公开
- 继承基类,定义基类的原型方法,但从第三个对象调用子类的方法
- C++继承基类使用派生类的成员
- C++-Do派生类继承基类的静态成员
- C++ OOP 体系结构:决定是从基类声明对象还是继承基类
- 继承基类时遇到问题
- 继承基类的一部分
- 我不希望派生类继承基类的构造函数
- 派生类继承基类赋值运算符
- C++继承基类析构函数
- 派生类是否继承基类使用的前向声明?
- 我继承基类以及多重继承的超类
- c++中的派生类构造函数可以继承基类构造函数吗?
- 继承的问题:派生类不继承基类
- 使子类继承基类的现有实例
- c++防止继承基类的特定公共成员