如何创建从同一类继承的不同对象的向量

How do I create a vector of different objects that inherit from the same class?

本文关键字:何创建 继承 对象 向量 一类 创建      更新时间:2023-10-16

我有不同的对象,如Triangle、Plane、Sphere等,它们都继承自objects类。我想创建这些不同对象的向量,然后循环遍历每个元素并对它们执行操作。我正在尝试制作一个光线跟踪器,我想在场景中放置很多不同的对象,但我不知道如何制作。OBJECTS是一个抽象类,所以我不能生成向量,因为我可以创建它的实例。我应该创建一个全新的类,并让所有的形状类从中继承吗?或者我应该重新生成objects类,使其不再抽象?感谢您的帮助。我的下一个最佳猜测是对象指针。

正如注释所建议的那样,您可以这样做。

class Object{
public:
virtual ~Object()= default;
virtual void foo() = 0;
};
class Pane: public Object{
public:
~Pane() = default;
void foo() override{
std::cout << "Hello Pane" << std::endl;
}
};
class Triangle: public Object{
public:
~Triangle() = default;
void foo() override{
std::cout << "Hello Triangle" << std::endl;
}
};
int main(){
std::vector<std::unique_ptr<Object>> objects;
objects.emplace_back(std::make_unique<Triangle>());
objects.emplace_back(std::make_unique<Pane>());
for(auto &object: objects){
object->foo();
}
return 0;
}

只需创建一个对象指针向量。请注意,您不必使用unique_pointers,但我强烈建议使用它,因为您不需要删除最后的对象。

这个简单程序的输出是:

Hello Triangle
Hello Pane