0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 20
|
||||||||||||||||
1 | ||||||||||||||||
Обход инкапсуляции класса02.11.2013, 13:12. Показов 1651. Ответов 17
Метки нет (Все метки)
Вопрос, как составить здесь грамотную защиту поля извне. Я думал о том, чтобы создавать локальную переменную в функции getname и возвращать её:
Вопрос 2:
0
|
02.11.2013, 13:12 | |
Ответы с готовыми решениями:
17
Обход членов класса Обход полей класса Рекурсивный обход. Не могу сделать табуляцию. Обход с выводом имен файлов Попытка Инкапсуляции |
4772 / 2581 / 893
Регистрация: 29.11.2010
Сообщений: 5,582
|
||||||
02.11.2013, 13:24 | 2 | |||||
Больше констов, хороших и разных.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
|
|
02.11.2013, 13:37 | 4 |
будет
самоуничтожится указатель на эту память, а память останется и в другом случае это привело бы к утечке, выделенная память есть а кто указывает на неё нету, значит достучатся не можем но у тебя этот указатель отдается наружу значит пускай удаляет тот кому мы передали этот указатель Но при таком подходе нарушается правило "кто выделил тот и удаляет",что может привести к трудноуловимым ошибкам
1
|
120 / 120 / 47
Регистрация: 29.03.2013
Сообщений: 237
|
||||||
02.11.2013, 13:47 | 5 | |||||
1
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
02.11.2013, 13:55 | 6 |
1
|
4772 / 2581 / 893
Регистрация: 29.11.2010
Сообщений: 5,582
|
|
02.11.2013, 14:02 | 7 |
Пардон, чет я попутался.
Снятие constant value модификатора (приведение к не-консту) ведет к UB -- компилятор сделает так, как захочет. В вашем случае, он хочет допустить такое поведение.
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
02.11.2013, 16:04 | 8 | |||||
Тут, я думаю, возможны исключения:
1. Если запись не производить, а только снять const, то проблем быть не должно. 2. Если изначальное значение не константа:
0
|
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 20
|
|
02.11.2013, 16:57 [ТС] | 9 |
OhMyGodSoLong, Нужно именно char*
Спасибо отписавшимся ап. Вопрос с грамотной инкапсуляцией остался
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||||||
02.11.2013, 18:33 | 11 | |||||
Pimpl.
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
02.11.2013, 20:06 | 12 |
А зачем это запрещать?
OhMyGodSoLong, а зачем PersonData торчит наружу и почему можно не писать деструктор Person?
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
02.11.2013, 21:11 | 15 |
Сообщение было отмечено как решение
Решение
Ну в смысле зачем делать имя PersonData видимым извне, если можно обойтись PersonData как вложенным классом?
unique_ptr для удаления объекта через delete нужен полный тип. Поэтому по идее нам нужно явно написать деструктор в файле реализации, иначе компилятор не сможет сгенерить деструктор из места, где PersonData не определена. Добавлено через 9 минут laucher, все нормально с инкапсуляцией. Зачем мешать другому разработчику, если он явно дополнительными телодвижениями указывает, что он знает, что и зачем делает? Это того не стоит.
1
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||||||
02.11.2013, 21:12 | 16 | |||||
Ок.
Больше не буду писать код не думая, спасибо.
0
|
Комп_Оратор)
|
||||||
02.11.2013, 23:35 | 18 | |||||
Мне самому очень интересно как бы здесь лучше поступить. С одной стороны поле - си-строка и значит если вернуть указатель, то защитить никак не получится. У OhMyGodSoLong интересная мысль мелькнула. Что если действительно возвращать копию другого типа. Например string:
0
|
02.11.2013, 23:35 | |
02.11.2013, 23:35 | |
Помогаю со студенческими работами здесь
18
Закоментированный пример инкапсуляции Об инкапсуляции данных в ООП Изучение инкапсуляции и абстракции Нарушение инкапсуляции метода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |