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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Наследование от QList.  (Прочитано 13451 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #15 : Март 10, 2011, 13:14 »

Такая, что деструктор не обязательно виртуальный, внутренности (private) скрыты и что в них - хз (т.е. нету полного контроля над внутренней реализацией), protected в большинстве отсутствует.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #16 : Март 10, 2011, 13:17 »

класс будет жить на стеке и виртуальный дестр ему не нужен
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #17 : Март 10, 2011, 13:18 »

Ога. Это типа такое ограничение? А вдруг забуду и сделаю его в куче? Т.е. захочу удалить через указатель на QList.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #18 : Март 10, 2011, 13:20 »

Цитировать
Если наследуешься от класса, который для этого не предназначен, можешь огрести косяков.
Чего-то я тоже не понимаю, что плохого в наследовании от QList?
Записан

Qt 5.11/4.8.7 (X11/Win)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #19 : Март 10, 2011, 13:21 »

Ога. Это типа такое ограничение? А вдруг забуду и сделаю его в куче? Т.е. захочу удалить через указатель на QList.
то ты перейдешь в разряд быдлокодеров. Нахрена майлист кастить к базовому классу?
Записан
SASA
Гость
« Ответ #20 : Март 10, 2011, 13:38 »

не понял, oprator[] же возвражает норм ссылку, а at() конст ссылку.
Ну, и в методах получается

Код:
oprator[](i).blabla()

Мало того, что выглядит страшно, так она ещё подсвечивается в IDE не как метод.

Цитировать
Тогда лучше QList агрегировать в свой класс.

В коде этот класс используется как контейнер. Можно, конечно, переопределить кучу методов, да так, чтоб не ошибиться с со всякими const, &, << и т.д. Долго и ошибкоопастно.
Записан
kirill
Гость
« Ответ #21 : Март 10, 2011, 16:45 »

Вот здесь я делаю такой изврат:
http://qtcoder.blogspot.com/2010/02/directmap-map.html

Код
C++ (Qt)
template <class Key, class Value>
class DirectMap : private QList<QPair<Key, Value> >
{
public:
 //! Добавляем пару
 void append(const Key &, const Value &);
 //! Список ключей
 QList<Key> keys() const;
 //!
 Value operator[](const Key & key) const;
};
 
 
 
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #22 : Март 10, 2011, 17:02 »

Вот здесь я делаю такой изврат:
http://qtcoder.blogspot.com/2010/02/directmap-map.html

Код
C++ (Qt)
template <class Key, class Value>
class DirectMap : private QList<QPair<Key, Value> >
{
public:
 //! Добавляем пару
 void append(const Key &, const Value &);
 //! Список ключей
 QList<Key> keys() const;
 //!
 Value operator[](const Key & key) const;
};
 
 
 

А зачем дублировать информацию о ключах, ведь её можно извлечь из  QList<QPair<Key, Value> >?
И почему просто не воспользоваться QMap?

Ой, совсем брежу)) QList - эт ж не член)) Первый вопрос решён))
« Последнее редактирование: Март 10, 2011, 17:13 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
twp
Гость
« Ответ #23 : Март 10, 2011, 17:14 »

по второму вопросу можно узнать ответ, прочитав каменты по той ссылке, что приведена перед фрагментом кода
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #24 : Март 10, 2011, 17:18 »

по второму вопросу можно узнать ответ, прочитав каменты по той ссылке, что приведена перед фрагментом кода
Ясненько)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #25 : Март 10, 2011, 17:39 »

А чего это "ссылка" производит такое магическое действие?  Улыбающийся Я вот читаю и не врубаюсь

Цитировать
Недостаток ассоциативного массива QMap в том, что в нем ключи упорядочиваются. Т.е. если я добавлю в QMap" Key2", "Key1", то на выходе получу, сюрприз, "Key1", "Key2". Ключи будут отсортированы.
Такое поведение честно говоря подзае..ло, а альтернативы в Qt нету.
На то он и map (красно-черное дерево) чтобы автоматом упорядочиваться, зачем называть это недостатком?

Цитировать
В качестве альтернативы они предлагают использовать QList<QPair<>>. Крайне громоздкая структура.
Наконец я решил сделать класс с удобством пользования как у QMap и с функционалом как у QList, т.е. без автоматического упорядочивания по ключам.
..
template <class Key, class Value>
Value DirectMap<Key, Value>::operator[](const Key & key) const
{
  for (int i = 0; i < QList::count(); ++i)
  {
   if (QList::at(i).first == key)
   {
     return QList::value(i).second;
   }
  }
  return Value();
}
Не жирно ли будет работать линейным перебором? Если "так надо" то с тем же успехом можно задействовать любой контейнер прямого доступа, а прятать это в операторе [] - никак не гуд. Если я чего-то не понял - поясните.
Записан
kirill
Гость
« Ответ #26 : Март 11, 2011, 10:43 »

Цитировать
Недостаток ассоциативного массива QMap в том, что в нем ключи упорядочиваются. Т.е. если я добавлю в QMap" Key2", "Key1", то на выходе получу, сюрприз, "Key1", "Key2". Ключи будут отсортированы.
Такое поведение честно говоря подзае..ло, а альтернативы в Qt нету.
На то он и map (красно-черное дерево) чтобы автоматом упорядочиваться, зачем называть это недостатком?

Ну не недостаток.
Я хочу мап, в котором ключи не упорядочиваются.

Цитировать
В качестве альтернативы они предлагают использовать QList<QPair<>>. Крайне громоздкая структура.
Наконец я решил сделать класс с удобством пользования как у QMap и с функционалом как у QList, т.е. без автоматического упорядочивания по ключам.
..
template <class Key, class Value>
Value DirectMap<Key, Value>::operator[](const Key & key) const
{
  for (int i = 0; i < QList::count(); ++i)
  {
   if (QList::at(i).first == key)
   {
     return QList::value(i).second;
   }
  }
  return Value();
}
Не жирно ли будет работать линейным перебором? Если "так надо" то с тем же успехом можно задействовать любой контейнер прямого доступа, а прятать это в операторе [] - никак не гуд. Если я чего-то не понял - поясните.
[/quote]

Согласен, код неоптимален, но общая идея как раз в том, чтобы спрятать в операторе [] процесс доступа к данным.










Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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