Задачка по С++, Придумал тут намедни задачку, как вам? |
Здравствуйте, гость ( Вход | Регистрация )
Задачка по С++, Придумал тут намедни задачку, как вам? |
ViGOur |
19.6.2017, 11:07
Сообщение
#1
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Есть классы:
Исходный код классов
|
|
|
Алексей1153 |
20.6.2017, 8:35
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
ViGOur, начнём с того, что означает "правильно" - а что должна делать функция ? ) Может, она уже правильно работает ?
Допустим, под "правильно" имеется в виду определение значения PRPT_END в СТАТИЧЕСКОЙ функции
для переданного контекста (объекта класса CClassMessage или его потомка) Раскрывающийся текст тут вариантов несколько 1) "enum eProperties" всех классов заменить на мембер std::map<int> CClassMessage::m_props; и заполнить в конструкторе потомков 2) виртуальная функция CClassMessage::GetPropsCount 3) можно удариться в шаблоны, но тут лишнее |
|
|
ViGOur |
21.6.2017, 15:48
Сообщение
#3
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
В принципе вопрос правильный!
Заменить enum на map не стоит, хотябы потому, что в каждом классе свои свойства, которые описываются в enum, к тому же как быт, если нужно обращение вроде: m_properties[PRPT_Name] ? Хардкодить - не по феншую... |
|
|
Алексей1153 |
22.6.2017, 9:09
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
ViGOur, так в конструкторе каждого класса мап заполнится своими свойствами
если нужно обращение "m_properties[PRPT_Name]", то напишут "m_properties[PRPT_Name]" )) если нужно запретить изменение - вернуть константную ссылку на мап |
|
|
ViGOur |
24.6.2017, 17:47
Сообщение
#5
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
а ты проверь!
|
|
|
Алексей1153 |
25.6.2017, 7:55
Сообщение
#6
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
ViGOur, не понял вопрос )
что именно нужно проверить ? |
|
|
ViGOur |
27.6.2017, 10:31
Сообщение
#7
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Ну а ты сделай по тем классам что описаны в первом посте примерно так:
и посмотри какие свойства будет у каждого объекта!
|
|
|
lanz |
27.6.2017, 16:54
Сообщение
#8
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Раскрывающийся текст
|
|
|
AD |
29.6.2017, 10:49
Сообщение
#9
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
|
|
|
lanz |
29.6.2017, 18:24
Сообщение
#10
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Цитата Одного раза, на мой взгляд, достаточно! Это паттерн "паблик морозов" Для отладки запилил, да и забыл поменять. Ну и вообще иногда использую для логического разделения и чтобы не забываить что все еще паблик. Например конструкторы под своим пабликом потом интерфейс 1, потом второй и т.п. |
|
|
Текстовая версия | Сейчас: 7.10.2024, 12:05 |