Название: Структура и типы Отправлено: Omg от Февраль 03, 2011, 21:13 Код: typedef struct M_UD{ Или лучше пойти по СПП пути и создать отдельный класс? Но тогда я знаю как с ним работать ^^ Название: Re: Структура и типы Отправлено: Fat-Zer от Февраль 03, 2011, 21:34 прочитайте какую-нибудь книжку по С++, а лучше сначала по си а потом по с++.
теперь по порядку: > typedef struct M_UD{ тайпдефы в объявление структур нужны были в си > QList<GD >* m_list; так можно, если вы понимаете, что написали, но скорей всего вы имели в виду "QList<GD*>" > Правилен ли подход и как с подобным работать, пока плохо понимаю. %) Может есть что попороще? Задача сохранять в листе разные типы данных при этом они должны быть связаны. работать: Код
> Или лучше пойти по СПП пути это две опечатки в ООП? > Но тогда я знаю как с ним работать ну так используйте Название: Re: Структура и типы Отправлено: Omg от Февраль 03, 2011, 21:58 СПП - CPP - C++ - классы, вместо структур, это я имел в виду. Просто был интересен именно такой подход и как его реализовать. Ведь надо же учиться, не просто так же спрашивать и делать, как знаешь. ;)
Премного благодарен. Название: Re: Структура и типы Отправлено: merke от Февраль 04, 2011, 04:31 Код
и т.д. Название: Re: Структура и типы Отправлено: gogi от Февраль 04, 2011, 11:05 СПП - CPP - C++ - классы, вместо структур, это я имел в виду. С точки зрения компиляторы с++ - это почти одно и тоже.Название: Re: Структура и типы Отправлено: Omg от Февраль 04, 2011, 11:12 Я в курсе и что? Видимо вы плохо поняли о чем я говорил...
Александр, спасибо за еще один пример. Название: Re: Структура и типы Отправлено: _govorilka от Февраль 04, 2011, 11:38 Ты можешь взять QVariantList. Это готовое решение и при этом довольно развитое.
Название: Re: Структура и типы Отправлено: Omg от Февраль 04, 2011, 11:58 Спасибо, попробую копнуть в этом направлении. :)
Название: Re: Структура и типы Отправлено: slim от Февраль 04, 2011, 19:14 Настоятельно рекомендую не использовать открытые поля, лучше перенечи их в секцию private, а доступ к ним сделай через методы:
struct M_UD { int get_x() const; void set_x(int); private: int x; }GD; QList<GD> m_list; Название: Re: Структура и типы Отправлено: Пантер от Февраль 04, 2011, 19:44 slim, а смысл для обычной структуры так извращаться? В данном случае это излишне.
Название: Re: Структура и типы Отправлено: Omg от Февраль 04, 2011, 19:48 Тем более она и так приват в любом случае. :)
Название: Re: Структура и типы Отправлено: slim от Февраль 04, 2011, 19:53 правильно писать смысл есть всегда ;)
Название: Re: Структура и типы Отправлено: Пантер от Февраль 04, 2011, 19:57 Omg, кто приват?
slim, Бритва Оккама (http://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B8%D1%82%D0%B2%D0%B0_%D0%9E%D0%BA%D0%BA%D0%B0%D0%BC%D0%B0) Название: Re: Структура и типы Отправлено: Igors от Февраль 04, 2011, 20:11 Настоятельно рекомендую не использовать открытые поля, лучше перенечи их в секцию private, а доступ к ним сделай через методы: Прошу меня правильно понять - я не хочу "придраться", начать "холивар" и.т.п. Но мне интересно понять ЗАЧЕМ? Почему "автоматическое" объявление private (многими) считается "всегда лучше"? Я понимаю set_x как намек: этот метод может производить какие-то действия, изменять и др. члены класса, а не просто установить x. Но в изначальной структуре я не вижу никакого даже намека на такую ф-циональность. Что же Вы хотели этим сказать (какую мысль выразить)? struct M_UD { int get_x() const; void set_x(int); private: int x; }GD; QList<GD> m_list; Название: Re: Структура и типы Отправлено: Omg от Февраль 04, 2011, 20:15 Omg, кто приват? Структура, просто тут это не описано.slim, Бритва Оккама (http://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B8%D1%82%D0%B2%D0%B0_%D0%9E%D0%BA%D0%BA%D0%B0%D0%BC%D0%B0) Название: Re: Структура и типы Отправлено: slim от Февраль 04, 2011, 21:02 2Igors:
моя мысль выражается в том, что данные нужно инкапсулировать. Название: Re: Структура и типы Отправлено: Igors от Февраль 04, 2011, 21:54 2Igors: Цель инкапсуляции - скрыть "внутренние делали реализации". Теперь getX/setX вместо "просто x" - ну и что же этим скрывается? :)моя мысль выражается в том, что данные нужно инкапсулировать. Хоть бы один честно сказал "ну списываю" :) Название: Re: Структура и типы Отправлено: slim от Февраль 04, 2011, 22:29 если данные используются за приделами класса/структуры я их всегда инкапсулирую
Название: Re: Структура и типы Отправлено: Waryable от Февраль 05, 2011, 08:13 Не знаю как вы, но я использую структуры только для группировки данных, не предъявляющих к своему доступу никаких требований. Все остальное оформляется другим способом. Как раз одним из средств реализации этих требований и является инкапсуляция.
PS: аднака вероятен холивар... :D Название: Re: Структура и типы Отправлено: kuzulis от Февраль 05, 2011, 11:50 Зачем использовать в С++ вообще структуры?
Замените их на классы и всё, ИМХО, месить всё кучу - нехорошо. Название: Re: Структура и типы Отправлено: Omg от Февраль 05, 2011, 12:31 Удобочитаемость программы - не? Не катит?
Название: Re: Структура и типы Отправлено: Пантер от Февраль 05, 2011, 12:40 kuzulis, иногда хорошо. Для обобщения каких-либо данных. Так же если в
классе становится довольно много mutable членов, то лучше их собрать в одну структуру. Название: Re: Структура и типы Отправлено: Waryable от Февраль 05, 2011, 12:50 Ну как бэ... Ответ тут больше метафизический.
Для меня Структура - это набор данных, а не представление некоторой сущности, в отличие от Класса. Структура не самодостаточна и служит только как свод открытых данных(квалификаторы доступа в описании структуры я никогда не использую). Встречая структуру в коде, который я написал год назад, я знаю, что это просто данные, за которыми не скрыто ничего больше. Т.о. для меня Структура и Класс - две разных концепции. Код: Замените их на классы и всё, ИМХО, месить всё кучу - нехорошо. Название: Re: Структура и типы Отправлено: Waryable от Февраль 05, 2011, 12:52 kuzulis, иногда хорошо. Для обобщения каких-либо данных. Так же если в Это не отговорка в данном случае. Оберните в Класс. ;Dклассе становится довольно много mutable членов, то лучше их собрать в одну структуру. Название: Re: Структура и типы Отправлено: Igors от Февраль 05, 2011, 13:10 Насколько я помню, общее определение "класса" в С++ это: class, struct или union. То есть ++ ничего не имеет против struct и они совсем не являются "пережитком С". Вот примерчик (а то разговор слишком общий)
Код Теперь мне надо много всяких утилитарных ф-ций, напр. Код Как Вы это сделаете с "аксессорами" - не устанете ли писать? :) Зачем начинать "бег в мешке" если в нем не было никакой необходимости (можно просто бежать) ? Название: Re: Структура и типы Отправлено: Fat-Zer от Февраль 05, 2011, 13:36 только union не мешайте в общую кучу, а так единственное различие между классом и структурой - это то, что в структуре все переменные по умолчанию открыты.
По поводу примера: сделать функции друзьями или членами (я обычно использую оператор * для скалярного и ^ для векторного - очень удобно получается). да и пару лишних скобок дописать труда не составит... Название: Re: Структура и типы Отправлено: Igors от Февраль 05, 2011, 14:19 только union не мешайте в общую кучу, а так единственное различие между классом и структурой - это то, что в структуре все переменные по умолчанию открыты. Я не "мешаю", а повторяю определение Страутструпа :) Кстати union очень интересный зверь, и жаль что (видимо) стандарт изменен и сейчас "union cannot have non-trivial members" - а при прежнем заведующем этого не было.По поводу примера: сделать функции друзьями или членами (я обычно использую оператор * для скалярного и ^ для векторного - очень удобно получается). да и пару лишних скобок дописать труда не составит... Верно, я тоже использую операторы * и | (для векторного). Но это хорошо когда "весь текст мой". А если уже есть какое-то приложение и оно использует свой класс, напр. QVector3D. А нужных ф-ций нет, и что делать? Наследоваться от QVector3D - так это бесконечные приведения. Приходится мириться с геттерами/сеттерами которые никакой нагрузки не несут а только путаются под ногами.На мой взгляд есть масса структур которые никакой "сущностью" не являются. Часто они могут иметь десятки ф-ций членов (напр та же CPoint) и особенно операторов, но все равно они пассивны, так что нечего городить искусственную инкапсуляцию. Если уж на то пошло то методы Код Противоречат идее инкапсуляции по существу. Нигде не должно возникать необходимости доступа только к "x" (конкретно для класса 3D точка). Название: Re: Структура и типы Отправлено: Fat-Zer от Февраль 05, 2011, 15:03 Кстати union очень интересный зверь, и жаль что (видимо) стандарт изменен и сейчас "union cannot have non-trivial members" - а при прежнем заведующем этого не было. Интересный то интересный, но на практике почти не используется... да и оставлен он ИМХО исключительно в целях совместимости с си.Код Да... c getX() векторное произведение выглядело бы особенно страшно) Нигде не должно возникать необходимости доступа только к "x" (конкретно для класса 3D точка). печать, обход плоскости.ЗЫ: я тоже не сторонник пихания в риват всего и вся. ;) |