Я не уверен, имеет ли смысл мой титул. Я пытаюсь реализовать класс очереди в c++. Ниже приведен мой класс q.cpp.
#include "q.h"
q::q()
{
for(int i = 0; i < q::QUEUE_SIZE; i++)
{
q::data[i] = '0';
}
q::front = q::rear = -1;
printf(" YEA QUEUE HAS BEEN CREATED ");
}
q* q::createQueue()
{
return new q;
}
Теперь в моем классе output (main.cpp) я хочу иметь возможность создавать новые очереди через вызов функции createQueue() и возвращать дескриптор текущему объекту класса очереди
Что-то вроде этого
q* firstQueue = createQueue();
q* secondQueue = createQueue();
Я думал, что мой главный конструктор q() должен быть закрытым, а createQueue должен действовать как фабрика, поэтому мой qh файл должен быть чем-то вроде ниже?
#ifndef Q_H
#define Q_H
#include <stdio.h>
class q
{
public:
void destroy_queue(q* currentQueue);
void enque_byte(q* currentQueue,unsigned char b);
unsigned char deque_byte(q* currentQueue);
static q* createQueue();
private:
static const int QUEUE_SIZE = 2048;
unsigned char data[QUEUE_SIZE];
int front, rear;
q();
};
#endif // Q_H
И тогда, как я смогу сделать enqueue, dequeue операции, позвонив
Затем выполняйте операции enqueue и dequeue на любом количестве очередей, таких как
enqueue(firstQueue,5);
dequeue(firstQueue);
enqueue(secondQueue,10);
..
..
И не используйте объекты, чтобы их называть
firstQueue->enqueue(...)
Я немного запутался в организации моего кода. Надеюсь, кто-то может дать представление о том, как я могу достичь такой структуры?
Вы можете просто написать простые обертки, например
void enqueue(q* obj, int x) {
obj->enqueue(x);
}
Однако все это не имеет особого смысла; C++ идиома заключается в использовании объектов и методов и, если вы не находитесь в том случае, когда эта идиома не работает так хорошо (например, мультиметоды), следуя ей намного легче, чем бороться с ней.
q firstqueue, secondqueue;