首页 > 解决方案 > 如何创建从同一类继承的不同对象的向量?

问题描述

我有不同的对象,例如三角形、平面、球体等,它们都继承自 OBJECTS 类。我想创建这些不同对象的向量,然后遍历每个元素并对它们执行操作。我正在尝试制作光线追踪器,我想创建将许多不同的对象放到场景中,但我不知道如何。OBJECTS 是一个抽象类,所以我不能创建向量,因为我可以创建它的实例。我应该创建一个全新的类并让所有形状类都继承自它吗?或者我应该重新制作对象类,使其不再是抽象的?帮助表示赞赏。我的下一个最佳猜测是对象指针。

标签: c++oop

解决方案


正如评论所建议的那样,您可以做这样的事情。

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

推荐阅读