ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 12) онлайн
Совместимость структур данных
Для корректной работы программы чтения и записи объектов (такие, как OPERS и
IPERS) должны иметь в виду один класс объектов. Например, объекты класса
person имеют длину ровно 82 байта, из которых 80 отведено под имя человека,
2 — под возраст в формате short. Если бы программы не знали длину полей, то
одна из них не смогла бы корректно прочитать из файла то, что записала другая.
Несмотря на то что классы person в OPERS и IPERS имеют одинаковые компо-
нентные данные, у них могут быть совершенно разные методы. Скажем, в первой
программе есть функция getData(), тогда как во второй — showData(). Не имеет
значения, какие используются методы в классах, — они в файл вместе с данными
не записываются. Это для данных важен единый формат, а разногласие между
методами ни к каким последствиям не приводит. Впрочем, это утверждение спра-
ведливо только для обычных классов, в которых не используются виртуальные
функции.
Если вы пишете в файл и читаете объекты производных классов, необходи-
мо соблюдать большую осторожность. В этих объектах есть загадочное число,
которое ставится перед началом их области данных в памяти. Оно помогает
идентифицировать класс объекта при использовании виртуальных функций.
Когда вы записываете объект в файл, это число записывается наряду с другими
данными. Если меняются методы класса, идентификатор также изменяется. Если
в классе имеются виртуальные функции, то при чтении объекта с теми же данны-
ми, но другими методами возникнут большие трудности. Отсюда мораль: класс,
использующийся для чтения объекта, должен быть идентичен классу, использо-
вавшемуся при его записи.
Можно даже не пытаться произвести дисковый ввод/вывод объектов, компо-
нентами которых являются указатели. Легко догадаться, что значения указате-
лей не будут корректными при чтении объекта в другую область памяти.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
Схожі підручники
- Теорія з курсу ПСУ
- Соціологія Навчально-методичний посібник для студентів всіх напрямків (частина 2)
- Загальні терміни з курсу «Філософія»
- Загальні питання з курсу Безпека життєдіяльності №1
- Основы эффективных продаж (онлайн)
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 1) онлайн