создание нового дескриптора для класса через функцию в C ++

0

Я не уверен, имеет ли смысл мой титул. Я пытаюсь реализовать класс очереди в 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(...)

Я немного запутался в организации моего кода. Надеюсь, кто-то может дать представление о том, как я могу достичь такой структуры?

  • 0
    Зачем вам заводская функция? Что не так с простыми экземплярами очередей? q firstqueue, secondqueue;
  • 0
    Хорошо, я забыл упомянуть, но это часть задачи программирования на С ++, которую я пытаюсь решить, которая требует, чтобы у нас была функция createQueue (), которая возвращает дескриптор этого объекта очереди!
Показать ещё 3 комментария
Теги:

1 ответ

0

Вы можете просто написать простые обертки, например

void enqueue(q* obj, int x) {
    obj->enqueue(x);
}

Однако все это не имеет особого смысла; C++ идиома заключается в использовании объектов и методов и, если вы не находитесь в том случае, когда эта идиома не работает так хорошо (например, мультиметоды), следуя ей намного легче, чем бороться с ней.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню