Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для SMYH
2 / 2 / 1
Регистрация: 23.10.2013
Сообщений: 38

Доступность полей при чтении из файла

09.04.2014, 20:44. Показов 1395. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Читая книгу Дейтела по С++, наткнулся на неясный код. В книге автор реализует задание:

Кликните здесь для просмотра всего текста
Создать для компании, которая может иметь до 100 клиентов,
программу для обработки кредита, которая способна хранить до 100 записей
фиксированной длины. Каждая запись должна состоять из полей номера
счета (служащего ключом записи), фамилии, имени и баланса счета.
Программа должна обеспечивать обновление счета, вставку нового счета,
удаление счета и вывод записей для всех счетов в форматированный
текстовый файл для распечатки.

Он реализует класс ClientData, в полях которого хранятся сведения (фамилии, счета, имена и т.д.). Поля класса закрыты, а доступ к ним осуществляется посредством get и set функций (в том числе и в конструкторе).
В примере, автор демонстрирует побайтовую запись из объектов этого класса(функция write из <fstream>), а затем и чтение из файла в эти объекты (read из <fstream>).

Вопрос вот в чем: почему он может получить доступ к закрытым полям класса, в то время как read и write не объявлены друзьями класса?

ЗЫ. Показать код не представляется возможным, т.к. копирование его - слишком трудоемкий процесс.

Добавлено через 18 минут
Забыл указать, как вызываются эти функции.

C++
1
2
3
outCredit.write( reinterpret_cast< const char * >( (client ), sizeof( ClientData ) ); 
 
inCredit.read( reinterpret_cast< char * >( ficlient ), sizeof( ClientData ) );
Может доступ возможен потому что мы приводим к const char*?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.04.2014, 20:44
Ответы с готовыми решениями:

"Нарушение прав доступа при чтении по адресу" при чтении структур из бинарного файла
Пытаюсь разобраться со структурами в бинарных файлах. Допустим, есть массив структур. Записываю его в бинарный файл (закомментированный...

Ошибка при вызове метода класса, при чтении из файла
добрый день, пытаюсь считать данные из и запихнуть их в список в файле у меня вот такие данные a01 b10 А и Б надо запихнуть в...

Абракадабра при чтении из файла
Добрый вечер! Имеется файл, в котором записан двумерный символьный массив, представляющий собой схему графа, например такой: 0 A B C D...

5
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2014, 21:48
Цитата Сообщение от SMYH Посмотреть сообщение
Вопрос вот в чем: почему он может получить доступ к закрытым полям класса, в то время как read и write не объявлены друзьями класса?
Он - это кто? Где read и write обращаются к полям класса? Создан объект класса, write() записывает память под этим объектом в файл, read() читает данные из файла в память под объектом. Никто к полям класса не обращается.
0
 Аватар для SMYH
2 / 2 / 1
Регистрация: 23.10.2013
Сообщений: 38
09.04.2014, 22:35  [ТС]
Он - это автор.
read() записывает данные в память, в то место, где хранится объект класса. То есть мы изменяем значения полей. Разве это не так? Содержимое памяти изменяется, а значит изменяется и содержимое полей.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2014, 22:50
Цитата Сообщение от SMYH Посмотреть сообщение
То есть мы изменяем значения полей. Разве это не так?
Так, но изменяем без доступа к полям. Чтобы невозможно было изменять память под объектом, нужно поместить объект в приватный раздел класса (сделать полем класса). Приватность раздела класса не предполагает невозможность изменения всей памяти под объектом, с таким разделом. Примите как данность.
0
 Аватар для SMYH
2 / 2 / 1
Регистрация: 23.10.2013
Сообщений: 38
09.04.2014, 22:57  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Чтобы невозможно было изменять память под объектом, нужно поместить объект в приватный раздел класса (сделать полем класса)
То есть, например, чтобы невозможно было записать или прочитать данные из ВСЕГО объекта используя read и write, нужно чтобы объект сам был приватным членом класса?
Цитата Сообщение от alsav22 Посмотреть сообщение
Приватность раздела класса не предполагает невозможность изменения всей памяти под объектом, с таким разделом.
Но тогда остается возможность несанкционированного доступа к закрытым полям класса. Даже если группа байт не сможет быть декодирована во что-то связное, то, в крайнем случае, можно просто стереть содержимое объекта.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2014, 22:59
Лучший ответ Сообщение было отмечено SMYH как решение

Решение

Вопрос выходит за рамки приватных разделов класса. Это вопрос о способах защиты памяти под переменными. Ведь объект класса - это такая же переменная, только пользовательского типа. Сама память, под обектом, ничего не знает о приватном разделе в этом объекте. Один из способов запрета изменения памяти под переменной (объектом) - объявить переменную как const.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.04.2014, 22:59
Помогаю со студенческими работами здесь

Ошибка при чтении из файла
Файл открывается, но читаться из него информация не хочется. Исходник int c_array :: save(char *path) { FILE *f; f =...

Иероглифы при чтении из файла
Привожу код, в котором создаю, файл записываю в него данные. Затем пытаюсь их считать, выводит иероглифы... Что не так?. Спасибо. ...

Ошибка при чтении файла
Необработанное исключение по адресу 0x0FE4172C (msvcp140d.dll) в .exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xCDCDCDCD. ...

Ошибка при чтении файла
Есть вот такой код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; ...

Проверка при чтении из файла
Добрый вечер! В своей программе на одном из этапов я построчно считываю целые числа из файла *.txt. Мне нужно чтобы в файле были только...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru