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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SMYH
2 / 2 / 0
Регистрация: 23.10.2013
Сообщений: 38
#1

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

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

bool при чтении из файла - C++
задание такое Сделайте функцию чтения из файла такой, чтобы она возвращала bool (истина - если считали данные, ложь - если нет) и...

Expression при чтении из файла - C++
Добрый день. Не могу понять - при чтении файла вылетает ошибка(экспрешн stream!=NULL) притом файл создан там же где main.cpp ...

Ошибка при чтении массива из файла - C++
Доброго времени суток всем участникам форума! При написании программы столкнулся с проблемой, которую самостоятельно, к сожалению, не могу...

Перезапись char при чтении из файла - C++
Добрый день. Возникла такая проблема: есть charchar s; в него я считываю информацию из файла infEP = fopen(&quot;e-p.txt&quot;, &quot;r&quot;); ...

Пропустить строчку при чтении из файла - C++
Подскажите как? Спасибо)

Перевод курсора при чтении из файла - C++
Доброго времени суток. Возник вопрос: Вот есть код fpWeapon = new std::fstream; if(!fpWeapon-&gt;good()) { ...

Ошибка при чтении данных из файла - C++
Имеем такую функцию чтения даных из фаила: void chtenie(char *imafaila) { FILE *sklad= fopen(imafaila, &quot;r&quot;); if...

Откат при посимвольном чтении файла - C++
Доброго времени суток. Читаю текстовый файл посимвольно, используя потоковые классы. Как средствами языка C++, произвести откат? То есть...

Вылет при чтении из бинарного файла - C++
Уважаемые товарищи, пожалуйста, помогите понять почему приведённые ниже функции, записывающие или читающие бинарный файл, работают или не...

Не понятная ошибка при чтении из файла - C++
#include&lt;iostream&gt; #include&lt;iomanip&gt; #include&lt;string&gt; #include&lt;fstream&gt; using namespace std; class Person { protected: int...


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

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

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