13:11

QT

задрот в различнейших областях
Осталось, буквально, чуть-чуть.
У меня есть файл queue.h Там описан мой класс Queue и переменная отдельно Queue M
Сама идея: мне нужно в разных окнах добавлять/удалять элементы. Потребность: очередь была везде одинаковая, то есть. В добавлении добавила пять элементов, удалила 3, вставила 4, нашла элемент. Все эти действия демонстрируются в разных окнах, но должны изменять и возвращать общую очередь.
Вопрос: как это провернуть?

@темы: Вопрос, Qt

Комментарии
30.04.2012 в 13:19

149ea694a792f3ad2caaf77077a0df58 Спорящая с богом
В разных окнах, но в одном экземпляре программы? Реализуйте паттерн синглтон, куда уж проще?
30.04.2012 в 13:26

задрот в различнейших областях
Караидель,
нашла пример на C++.
Как его использовать? Не разу не пробовала.
30.04.2012 в 14:14

149ea694a792f3ad2caaf77077a0df58 Спорящая с богом
Лучше разберите теорию, тогда сразу станет понятно. Вкратце: синглтон - класс не имеющий публичного конструктора, но имеющий статический указатель (или ссылку) на объект своего типа. Статический конструктор (или property при первом обращении, если речь идёт о NET-языках и хочется реализовать ещё и паттерн отложенной инициализации) инициализирует его. Другие классы, соответственно, обращаются к одному и тому же объекту через этот указатель. В рамках одного процесса всё просто и изящно работает.
30.04.2012 в 14:16

WAAAAAAAAAGH!!!!!!1111ONEONE
[TrusT],
там все достаточно просто

private:
OnlyOne(){}
OnlyOne(OnlyOne& root){}
делаете невозможным вызов конструктора из вне класса, т.е. запрещаете создавать экземпляры всяким там окнам и прочим, кому не положено.

static OnlyOne& const Instance() - статик, чтобы вызывать без зависимости от экземпляра (OnlyOne::Instance())
{
static OnlyOne theSingleInstance; - будет одинаковой при каждом запуске метода, поэтому создастся только в первый раз. И всегда будет возвращаться один и тот же экземпляр.
return theSingleInstance;
}

OnlyOne& operator=(OnlyOne&){} - чтоб не копировали лишний раз.

остается заменить имя класса и добавить нужные переменные в метод Instance, если нужно передавать параметры в конструктор.
30.04.2012 в 15:52

задрот в различнейших областях
метод Instance и есть тот, который нужно вызывать в других модулях? Или наоборот, тот, который нужно в самом начале объявить?
эх, я надеялась на маленькую заплаточку=)
30.04.2012 в 16:49

149ea694a792f3ad2caaf77077a0df58 Спорящая с богом
эх, я надеялась на маленькую заплаточку=)
готовый класс переделывается в синглтон легко и просто.
30.04.2012 в 16:55

задрот в различнейших областях
Караидель, ну, например вместо OnlyOne я пишу название своего класса Queue. А вот Instance? Что это? и действительно, как и что вызывать?
30.04.2012 в 17:09

149ea694a792f3ad2caaf77077a0df58 Спорящая с богом
[TrusT],
повторяю для тех, кто на бронепоезде: у класса должно быть константный статический поле-член типа ссылка/указатель на свой же тип, традиционно его зовут Instance. Хотите - делайте его публичным, хотите - пишите к нему статический же геттер. Конструктор - только приватный, собственно для инциализации Instance статическим конструктором. Все обращения к классу идут в виде [имя класса].Instance.[имя функции]([параметры]). Локальный экземпляр никто создать не может, поскольку не имеет прав доступа к конструктору.
30.04.2012 в 17:19

задрот в различнейших областях
Караидель, ок, хорошо, попробую попозже, надо от бедного курсача отдохнуть
30.04.2012 в 19:44

задрот в различнейших областях
ох, не знаю, применила пример, перепроверила каждую точку - 11 ошибок.
ох уж этот Qt.
Может это из-за того, что сишный пример? Пойду пример исключительно для Qt
30.04.2012 в 20:28

149ea694a792f3ad2caaf77077a0df58 Спорящая с богом
[TrusT],
не надо ничего копировать. Я Вам три раза разжевала принцип паттерна. Так сложно написать? Там строчек 5 от силы.
30.04.2012 в 22:59

задрот в различнейших областях
Караидель, да, сложновато, потому что много на данном этапе знаний все не усваивается. И если на c++ я еще могу написать - и там у меня все работает!, то qtшный креатор закидывает меня ошибками в main.obj и всех остальных .obj.
Пока на черновом варианте поставила externы.