Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
thick_int
Заблокирован
1

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

02.01.2012, 17:13. Просмотров 1658. Ответов 8
Метки нет (Все метки)

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

Возврат ссылки на закрытый элемент данных с++
Я не могу понять как устроена проблема с возвратом ссылки на закрытый элемент...

Возвращение функцией массива (или указателя на массив)
Вопрос опытным. Имеется массив картинок TImage, который создается одной...

Возвращение неконстантного указателя из константного указателя на строку
Не могу до конца понять один момент. Допустим, у нас есть функция...

Получение указателя из производного класса на элемент одного из базовых классов
Как все же получить указатель или пускай ссылку на элемент Coef базового класса...

Создание указателя на экземпляр класса, описанного после объявления указателя
Здравствуйте! Проблема в том, что нужно сделать так: class A{ public: B*...

8
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
02.01.2012, 17:45 2
В С++ всегда было много узких мест, за которыми надо тщательно следить. Но простите, а что в том, о чём вы говорите, такого? И в C#, и в Java тоже можно возвращать ссылку на закрытое или защищённое поле.
1
thick_int
Заблокирован
02.01.2012, 18:26  [ТС] 3
Ну тех языков, которые Вы упомянули, я просто не знаю.
Ну теперь буду знать, что это общая беда.
0
Razzeeyy
30 / 7 / 0
Регистрация: 01.03.2011
Сообщений: 95
02.01.2012, 18:53 4
Концепция классов и инкапсуляции данных придумана отнюдь не для "действительной" безопасности программы, а всего-лишь для удобства поиска ошибок в больших программах (компилятор помогает программисту быстрее локализовать ошибку).
Отсюда выходит, что нету ничего зазорного в том, чтобы предоставить программисту возможность вернуть ссылку на закрытый член если он того сознательно захотел.
К тому же это помогает избежать создания лишнего объекта внутри класса, затем копирование в него содержимого объекта из закрытой части класса, затем возвращение указателя(!) из функции, и еще это же надо проследить, чтобы объект был своевременно уничтожен во избежание утечек памяти.
Ну и теперь подумайте, нужен ли вам "100% безопасный код"?
0
Gepar
1181 / 537 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
02.01.2012, 19:04 5
Ну вернуть ссылку на закрытое поле незаметно для себя не получиться, а уж вернуть, забыть об этом и случайно изменить ещё сложнее. Не думаю что если такое проделать то это можно будет назвать недоработкой языка, это скорее недоработка мышления программиста или злой умысел какой-то.
2
thick_int
Заблокирован
02.01.2012, 19:20  [ТС] 6
Цитата Сообщение от Gepar Посмотреть сообщение
Ну вернуть ссылку на закрытое поле незаметно для себя не получиться, а уж вернуть, забыть об этом и случайно изменить ещё сложнее. Не думаю что если такое проделать то это можно будет назвать недоработкой языка, это скорее недоработка мышления программиста или злой умысел какой-то.
Все это, конечно верно, но если посмотреть на кипишь, который в C++ развернут вокруг, например, ключевого слова const, то волей-неволей, задаешь себе вопрос, а кто тогда программисту мешает помнить, что данный объект является константным и модификации не подлежит.
Наверно, просто если принята концепция разумного запрета модификации, то тогда она должна быть реализована до конца.
0
Razzeeyy
30 / 7 / 0
Регистрация: 01.03.2011
Сообщений: 95
02.01.2012, 19:49 7
const не для программиста в первую очередь, оно для компилятора, большинство const выражений вычисляются во время компиляции.
ах да, еще const в аргументах функции служит другим программистам гарантией того, что данное значение не изменят в функции.
Одно значение очень легко изменить, забыв при этом о его "константности", а вот классы уже проектируются более вдумчиво и там шансы, что "по забывчивости" будет создана ужасная ошибка очень ничтожны
1
thick_int
Заблокирован
02.01.2012, 19:57  [ТС] 8
Хорошо, ну давайте сойдемся на том, что неплохо было бы, чтобы в будущих версиях компилятора хотя бы выдавалось предупреждение о том, что открытая функция возвращает левотороннюю ссылку или указатель на неконстанту, объектами которых являются закрытые члены класса.
0
Razzeeyy
30 / 7 / 0
Регистрация: 01.03.2011
Сообщений: 95
02.01.2012, 20:03 9
Цитата Сообщение от thick_int Посмотреть сообщение
Хорошо, ну давайте сойдемся на том, что неплохо было бы, чтобы в будущих версиях компилятора хотя бы выдавалось предупреждение о том, что открытая функция возвращает левотороннюю ссылку или указатель на неконстанту, объектами которых являются закрытые члены класса.
Теперь вам осталось отослать данный suggestion Страуструпу

Не по теме:

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

0
02.01.2012, 20:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2012, 20:03

Возвращение указателя на соответствующую строку
Доброго времени суток. Есть задача: по номеру дня недели вывести его название...

Возвращение указателя на начало первой строки
Программа отказывается выполнять второй цикл. #include "stdafx.h"...

Возвращение ссылки из функции
Привет, я немного не понимаю, почему в следующем коде в строках 16-17 надо...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru