Форум программистов, компьютерный форум CyberForum.ru

Возвращение ссылки или указателя на закрытый элемент класса. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
thick_int
Заблокирован
02.01.2012, 17:13     Возвращение ссылки или указателя на закрытый элемент класса. #1
Всех уважаемых форуман. поздравляю с наступившим новым годом и прошу ответить на такой вопрос.
Почему до сих пор современный C++ не избавился от такой зияющей бреши, как воззвращение открытой членом-функцией ссылки или указателя на закрытый член данного класса?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2012, 17:13     Возвращение ссылки или указателя на закрытый элемент класса.
Посмотрите здесь:

Возвращение функцией массива (или указателя на массив) C++
Понимание адреса, ссылки и указателя C++
C++ Возвращение ссылки на указатель использование её как левостороннего значения
C++ Возвращение ссылки на локальную переменную
Возвращение значения в функции, ссылки, вычислить корни квадратного уравнения C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.01.2012, 17:45     Возвращение ссылки или указателя на закрытый элемент класса. #2
В С++ всегда было много узких мест, за которыми надо тщательно следить. Но простите, а что в том, о чём вы говорите, такого? И в C#, и в Java тоже можно возвращать ссылку на закрытое или защищённое поле.
thick_int
Заблокирован
02.01.2012, 18:26  [ТС]     Возвращение ссылки или указателя на закрытый элемент класса. #3
Ну тех языков, которые Вы упомянули, я просто не знаю.
Ну теперь буду знать, что это общая беда.
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
02.01.2012, 18:53     Возвращение ссылки или указателя на закрытый элемент класса. #4
Концепция классов и инкапсуляции данных придумана отнюдь не для "действительной" безопасности программы, а всего-лишь для удобства поиска ошибок в больших программах (компилятор помогает программисту быстрее локализовать ошибку).
Отсюда выходит, что нету ничего зазорного в том, чтобы предоставить программисту возможность вернуть ссылку на закрытый член если он того сознательно захотел.
К тому же это помогает избежать создания лишнего объекта внутри класса, затем копирование в него содержимого объекта из закрытой части класса, затем возвращение указателя(!) из функции, и еще это же надо проследить, чтобы объект был своевременно уничтожен во избежание утечек памяти.
Ну и теперь подумайте, нужен ли вам "100% безопасный код"?
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
02.01.2012, 19:04     Возвращение ссылки или указателя на закрытый элемент класса. #5
Ну вернуть ссылку на закрытое поле незаметно для себя не получиться, а уж вернуть, забыть об этом и случайно изменить ещё сложнее. Не думаю что если такое проделать то это можно будет назвать недоработкой языка, это скорее недоработка мышления программиста или злой умысел какой-то.
thick_int
Заблокирован
02.01.2012, 19:20  [ТС]     Возвращение ссылки или указателя на закрытый элемент класса. #6
Цитата Сообщение от Gepar Посмотреть сообщение
Ну вернуть ссылку на закрытое поле незаметно для себя не получиться, а уж вернуть, забыть об этом и случайно изменить ещё сложнее. Не думаю что если такое проделать то это можно будет назвать недоработкой языка, это скорее недоработка мышления программиста или злой умысел какой-то.
Все это, конечно верно, но если посмотреть на кипишь, который в C++ развернут вокруг, например, ключевого слова const, то волей-неволей, задаешь себе вопрос, а кто тогда программисту мешает помнить, что данный объект является константным и модификации не подлежит.
Наверно, просто если принята концепция разумного запрета модификации, то тогда она должна быть реализована до конца.
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
02.01.2012, 19:49     Возвращение ссылки или указателя на закрытый элемент класса. #7
const не для программиста в первую очередь, оно для компилятора, большинство const выражений вычисляются во время компиляции.
ах да, еще const в аргументах функции служит другим программистам гарантией того, что данное значение не изменят в функции.
Одно значение очень легко изменить, забыв при этом о его "константности", а вот классы уже проектируются более вдумчиво и там шансы, что "по забывчивости" будет создана ужасная ошибка очень ничтожны
thick_int
Заблокирован
02.01.2012, 19:57  [ТС]     Возвращение ссылки или указателя на закрытый элемент класса. #8
Хорошо, ну давайте сойдемся на том, что неплохо было бы, чтобы в будущих версиях компилятора хотя бы выдавалось предупреждение о том, что открытая функция возвращает левотороннюю ссылку или указатель на неконстанту, объектами которых являются закрытые члены класса.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2012, 20:03     Возвращение ссылки или указателя на закрытый элемент класса.
Еще ссылки по теме:

C++ Возвращение указателя на начало первой строки
Передача ссылки и указателя в функцию C++
C++ Об удалении указателя в деструкторе класса

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
02.01.2012, 20:03     Возвращение ссылки или указателя на закрытый элемент класса. #9
Цитата Сообщение от thick_int Посмотреть сообщение
Хорошо, ну давайте сойдемся на том, что неплохо было бы, чтобы в будущих версиях компилятора хотя бы выдавалось предупреждение о том, что открытая функция возвращает левотороннюю ссылку или указатель на неконстанту, объектами которых являются закрытые члены класса.
Теперь вам осталось отослать данный suggestion Страуструпу

Не по теме:

Вот какие действительно проблемы в языке C++ и достаточно острые (сейчас полетят камни но..), так это препроцессор и эта канитель с include... Недавно собирал с виду безобидную по виду "архитектуру" этих самых "файлов-модулей" приложения, так компилятор на прочь твердил мне о переопределении некоторых переменных... Даже при живых инклуд гвардах! Кароче я так толком и не разобрался, но думаю, косяк был из-за непонятной мне логики обработки едениц трансляции и почему-то "перекрытия" объявлений в одной еденице трансляции объявлений в другой.. Бардак одним словом, я плюнул и стал пихать весь код "файлов модулей" в заголовочные файлы (каждый в свой, следуя здравой логике), и всё! При использовании инклуд гвардов всё компилиться без проблем! Правда не по стандарту сделано, да и пёс с ним))

Yandex
Объявления
02.01.2012, 20:03     Возвращение ссылки или указателя на закрытый элемент класса.
Ответ Создать тему
Опции темы

Текущее время: 04:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru