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

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

Восстановить пароль Регистрация
 
SMYH
 Аватар для SMYH
2 / 2 / 0
Регистрация: 23.10.2013
Сообщений: 38
09.04.2014, 20:44     Доступность полей при чтении из файла #1
Читая книгу Дейтела по С++, наткнулся на неясный код. В книге автор реализует задание:

Кликните здесь для просмотра всего текста
Создать для компании, которая может иметь до 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*?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2014, 20:44     Доступность полей при чтении из файла
Посмотрите здесь:

Иероглифы при чтении из файла C++
C++ Проверка при чтении из файла
Ошибка при чтении из файла C++
C++ bool при чтении из файла
Expression при чтении из файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2014, 21:48     Доступность полей при чтении из файла #2
Цитата Сообщение от SMYH Посмотреть сообщение
Вопрос вот в чем: почему он может получить доступ к закрытым полям класса, в то время как read и write не объявлены друзьями класса?
Он - это кто? Где read и write обращаются к полям класса? Создан объект класса, write() записывает память под этим объектом в файл, read() читает данные из файла в память под объектом. Никто к полям класса не обращается.
SMYH
 Аватар для SMYH
2 / 2 / 0
Регистрация: 23.10.2013
Сообщений: 38
09.04.2014, 22:35  [ТС]     Доступность полей при чтении из файла #3
Он - это автор.
read() записывает данные в память, в то место, где хранится объект класса. То есть мы изменяем значения полей. Разве это не так? Содержимое памяти изменяется, а значит изменяется и содержимое полей.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2014, 22:50     Доступность полей при чтении из файла #4
Цитата Сообщение от SMYH Посмотреть сообщение
То есть мы изменяем значения полей. Разве это не так?
Так, но изменяем без доступа к полям. Чтобы невозможно было изменять память под объектом, нужно поместить объект в приватный раздел класса (сделать полем класса). Приватность раздела класса не предполагает невозможность изменения всей памяти под объектом, с таким разделом. Примите как данность.
SMYH
 Аватар для SMYH
2 / 2 / 0
Регистрация: 23.10.2013
Сообщений: 38
09.04.2014, 22:57  [ТС]     Доступность полей при чтении из файла #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Чтобы невозможно было изменять память под объектом, нужно поместить объект в приватный раздел класса (сделать полем класса)
То есть, например, чтобы невозможно было записать или прочитать данные из ВСЕГО объекта используя read и write, нужно чтобы объект сам был приватным членом класса?
Цитата Сообщение от alsav22 Посмотреть сообщение
Приватность раздела класса не предполагает невозможность изменения всей памяти под объектом, с таким разделом.
Но тогда остается возможность несанкционированного доступа к закрытым полям класса. Даже если группа байт не сможет быть декодирована во что-то связное, то, в крайнем случае, можно просто стереть содержимое объекта.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2014, 22:59     Доступность полей при чтении из файла #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вопрос выходит за рамки приватных разделов класса. Это вопрос о способах защиты памяти под переменными. Ведь объект класса - это такая же переменная, только пользовательского типа. Сама память, под обектом, ничего не знает о приватном разделе в этом объекте. Один из способов запрета изменения памяти под переменной (объектом) - объявить переменную как const.
Yandex
Объявления
09.04.2014, 22:59     Доступность полей при чтении из файла
Ответ Создать тему
Опции темы

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