Если вам нужно сгенерировать определенное количество экземпляров вашего класса Queue, которое является фиксированным и известным во время компиляции, ваше кодовое решение будет работать.Однако если у вас есть программа, в которой необходимо создавать новые экземпляры очереди во время ее работы, вам необходимо использовать динамическое выделение памяти в куче.
Один из подходов к этому - создать массив или векторуказателей на ваш класс Queue в main.cpp.Std :: vector более гибок, и лучше использовать умный указатель для создания каждого экземпляра очереди, хотя многие академические курсы не позволяют использовать стандартную библиотеку шаблонов или умные указатели, и в этом случае вам нужно простообычный массив указателей на очередь и использование новых и удаление соответствующим образом.
const int SIZE = 100 //max number of Queue instances
Queue* allQueues[SIZE]; //array of uninitialized pointers to Queue
for (int i = 0; i < SIZE; i++) { //ensure all pointers are set to null
allQueues[i] = nullptr;
}
//To make a new Queue instance and insert it into the array:
allQueues[0] = new Queue();
//And when done with that Queue instance, to avoid memory leaks and dangling pointers:
delete allQueues[0];
allQueues[0] = nullptr;
(все гораздо лучше сделать с помощью std :: array или std :: vector и интеллектуальных указателей).Обратите внимание также на использование памяти: без этого подхода у вас есть два полноразмерных экземпляра Queue для queue1 вместо самого объекта и указателя на этот объект.Тем не менее, можно использовать массив указателей, используя только автоматическое выделение стека, но в этом случае вы не хотите создавать новые объекты во время выполнения.Для этого все просто:
Queue* allQueues[4];
allQueues[0] = &queue1;
//etc.
PS Одна проблема с вашим решением состоит в том, что при выполнении этого задания:
allQueues[0] = queue1;
Вам нужен конструктор копирования в вашем классе или перегруженныйОператор '=', чтобы гарантировать, что все внутренности queue1 правильно скопированы в массив объектов Queue, и избежать всех проблем с "мелким копированием".
Queue::Queue(const Queue& copySource) {
this->size = copysource.size;
this->Q = new int[copysource.size];
for (int i = 0; i < size; i++) {
this->Q[i] = copysource.Q[i];
}
См .: Почему можноДоступ к закрытым переменным в конструкторе копирования?