Как мне создать вектор различных объектов, которые наследуются от одного и того же класса? - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть разные объекты, такие как треугольник, плоскость, сфера и т. Д. c. что все наследуют от класса OBJECTS. Я хочу создать вектор этих различных объектов, затем l oop через каждый из элементов и выполнить операции над ними. Я пытаюсь сделать raytracer, и я хочу создать много разных объектов на сцене, но я понятия не имею, как. OBJECTS - это абстрактный класс, поэтому я не могу создать вектор, потому что я могу создавать его экземпляры. Должен ли я создать совершенно новый класс и наследовать от него все классы фигур? Или мне следует переделать класс объектов, чтобы он больше не был абстрактным? Помощь приветствуется. Моя следующая лучшая догадка - указатели объектов.

1 Ответ

1 голос
/ 21 февраля 2020

как говорится в комментарии, вы можете сделать что-то вроде этого.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...