Russian Qt Forum
Май 06, 2024, 11:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Solved] Иерархия классов  (Прочитано 5437 раз)
ddipp
Гость
« : Февраль 07, 2009, 02:28 »

Есть класс работающий с sql базой.
Остальные классы работающие с gui, обрабатывающие действия пользователя должны иметь доступ к базе.
Какую иерархию классов придумать?

Код:
             guiClass
             /      \
 guisubclass1        guisubclass2
Куда тут всунуть sql?
« Последнее редактирование: Февраль 07, 2009, 10:57 от ddipp » Записан
Karl-Philipp
Гость
« Ответ #1 : Февраль 07, 2009, 08:58 »

Возможно в класс с GUI стоит поместить указатель на класс, который работает с sql базой. Тогда не нужно будет думать над иерархией Улыбающийся
Записан
ddipp
Гость
« Ответ #2 : Февраль 07, 2009, 10:28 »

Возможно в класс с GUI стоит поместить указатель на класс, который работает с sql базой. Тогда не нужно будет думать над иерархией Улыбающийся
То есть

Код:
class guiClass
{
public:
  guiClass();
private:
  sql *s;
  guisubclass1 gui1;
  guisubclass2 gui2;
}

guiClass::guiClass()
{
   s = new sql();
   gui1 = new guisubclass1(s);
   gui2 = new guisubclass2(s);
}
И указатель передавать подклассам?

Просто я в C++ как бы плаваю. Мне б не наплодить кучу экземпляров класса sql Улыбающийся.
Записан
Karl-Philipp
Гость
« Ответ #3 : Февраль 07, 2009, 10:37 »

...
И указатель передавать подклассам?
...
ага, это и имелось в виду.
Передача указателя в другой класс не вызовет "размножения" Улыбающийся
Записан
BRE
Гость
« Ответ #4 : Февраль 07, 2009, 10:48 »

1. Можно использовать паттерн Singleton (почитай про него в нете).
2. Можно сделать в guiClass статический метод, который будет возвращать указатель на sql. Примерно так:
Код
C++ (Qt)
// .h
class guiClass
{
public:
guiClass();
static sql *getSql();
 
private:
static sql *m_sql;
};
 
// .cpp
sql *guiClass::m_sql = 0;
 
guiClass::guiClass()
{
Q_ASSERT( m_sql == 0 )
m_sql = new sql;
...
}
 
sql *guiClass::getSql()
{
return m_sql;
}
 

Использование в guisubclass:
Код
C++ (Qt)
void guisubclass1::method()
{
sql *theSql = guiClass::getSql();
Q_ASSERT( theSql != 0 );
}
 
Есть и другие варианты.
В каждом варианте есть свои + и -. Решать нужно в зависимости от текущих задач.
« Последнее редактирование: Февраль 07, 2009, 10:51 от BRE » Записан
ddipp
Гость
« Ответ #5 : Февраль 07, 2009, 10:56 »

Примерно понятно.
Пошел созидать Улыбающийся.
Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.183 секунд. Запросов: 20.