Один QVector для разных типов объектов

152
12 июля 2019, 06:10

Возник такой вопрос: у меня есть главный класс Figures, от которого я унаследовал Circle,Square,Triangle и т.д. Теперь хочу создать QVector для хранения всех объектов, которые наследовал от Figures.

Подскажите пожалуйста, как правильно объявить QVector и использовать его(обращение к конкретному элементу)? И корректно ли будет так делать?

Answer 1

Вам нужно объявить вектор указателей на Figures, записывая в эти указатели адреса объектов конкретных фигур:

QVector<Figures*> figures;

Добавить элемент при помощи метода push_back, например:

figures.push_back(new Circle(params));
figures.push_back(new Triangle(params));
figures.push_back(new Square(params));

Использовать это можно примерно так:

for(int i = 0; i < figures.size(); i++)
    figures[i]->move(10, 10);            // если метод move объявлен в Figures

Следует отметить, что в этом случае вы сможете использовать только те методы, о которых "знает" класс Figures (реализованные в нем или виртуальные). Чтобы использовать методы конкретной фигуры, например радиус для окружности, вам нужно будет сделать преобразование типа указателя из Figures* в Circle*.

READ ALSO
c++ Запись в bin файл

c++ Запись в bin файл

Начал писать свой оптимизатор-транслятор кода for funЯ новичок в c++ и ЯВУ

130
Undefined reference to &ldquo;Classname::Classname&rdquo; Qt C++

Undefined reference to “Classname::Classname” Qt C++

У меня есть проект, который содержит в себе два других (использую subdirs)Вызовом нужных функций из подпроектов занимается класс MainWindow, который...

160
Не возможно выйти из цикла c++

Не возможно выйти из цикла c++

Вот такой кусок кода:

139
Не отображается часть кода из *.jsp в Tomcat

Не отображается часть кода из *.jsp в Tomcat

Использую IntelliJ IDEA Ultimate и Tomcat 9:

144