Указатели на базовый класс. Их свойства 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Указатели на базовый класс. Их свойства



Ссылки на базовый класс могут быть использованы для ссылок на объект производного типа. Такая техника наиболее употребительна при работе с функциями. Если параметр является ссылкой на базовый класс, то он может принимать значение ссылки как на объект базового класса, так и на объекты производных типов.

 

Статический и динамический полиморфизм. Понятие о раннем и позднем связывании member-функций.

Статический и динамический полиморфизм

Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс. Общность имеет внешнее и внутреннее выражение:

Полиморфизм может пониматься как наличие точек кастомизации в коде, когда один и тот же написанный программистом фрагмент кода может означать разные операции в зависимости от чего-либо.

В одном случае конкретный смысл фрагмента зависит от того, в каком окружении код был построен. Это т.н. статический полиморфизм. Перегрузка функций, шаблоны в Си++ реализуют именно статический полиморфизм. Если в коде шаблонного класса вызвана, например, std::sort, то реальный смысл вызова зависит от того, для каких именно типовых параметров будет развернут данный шаблон - вызовется одна из std::sort<T>.

В другом случае конкретный смысл фрагмента определяется только на этапе исполнения и зависит от того, как именно и где именно был построен данный объект. Это обычный, динамический полиморфизм, реализуется через виртуальные методы.

 

Полиморфизм-перегрузка

Это частный случай полиморфизма. С помощью перегрузки одно и то же имя может обозначать различные методы, причем методы могут различаться количеством и типом параметров, то есть не зависят от своих аргументов. Метод может не ограничиваться специфическими типами параметров многих различных типов.

 

Понятие о раннем связывании member-функций.

Связывание — это сопоставление вызова функции с телом. В приведенных ранее примерах связывание выполняется на этапе трансляции (до запуска) программы. Такое связывание обычно называют ранним, или статическим.

Раннее связывание использовалось во всех функциях и методах наших программ за исключением тех случаев, где мы использовали указатели на функции.

Компилятор просматривает исходный код и превращает все операторы в команды процессора. Допустим, в коде встречается вызов какой-нибудь функции:

someFunction(arg); // some - какой-то

Если это обычная функция (не указатель на функцию), то при вызове используется механизм раннего связывания.

Во время компиляции для кода (определения) функции выделяется память, и назначаются адреса для каждого оператора. Первый адрес в определении (теле функции) является адресом функции. При вызове someFunction, процессор будет переходить на адрес функции и начнёт выполнять тело функции. Самое важное здесь то, что адрес функции назначается во время компиляции, и именно этот адрес используется при вызове функции. Это и есть раннее или статичное связывание. Т.е. имя функции крепко привязано к адресу функции.

 

Понятие о позднем связывании member-функций.

Называется поздним статическим связыванием, которое может быть использована для того чтобы получить ссылку на вызываемый класс в контексте статического наследования.

Самоназвание "позднее статическое связывание" отражает в себе внутреннюю реализацию этой особенности. "Позднее связывание" отражает тот факт, что обращения через static не будут вычисляться по отношению к классу, в котором вызываемый метод определен, а будут вычисляться на основе информации в ходе исполнения. Также эта особенность была названа "статическое связывание" потому, что она может быть использована (но не обязательно) в статических методах.

 

Использование позднего статического связывания

Позднее статическое связывание пытается устранить это ограничение предоставляя ключевое слово, которое ссылается на класс, вызванный непосредственно в ходе выполнения. Было решено не вводить новое ключевое слово, а использовать static, которое уже зарезервировано.

 

Файловый ввод-вывод.

Заголовочный файл fstream.h определяет классы ifstream и ofstream, с помощью которых ваша программа может выполнять операции файлового ввода и вывода.

Для открытия файла на ввод или вывод вы должны объявить объект типа ifstream или ofstream, передавая конструктору этого объекта имя требуемого файла.

После того как ваша программа открыла файл для ввода или вывода, она может читать или писать данные, используя операторы извлечения (>>) и вставки (<<).

Ваши программы могут выполнять ввод или вывод символов в файл или из файла, используя функции get и put.

Ваши программы могут читать из файла целую строку, используя функцию getline.

Большинство программ читают содержимое файла, пока не встретится конец файла. Ваши программы могут определить конец файла с помощью функции eof.

Когда ваши программы выполняют файловые операции, они должны проверять состояние всех операций, чтобы убедиться, что операции выполнены успешно. Для проверки ошибок ваши программы могут использовать функцию fail.

Если вашим программам необходимо вводить или выводить такие данные, как структуры или массивы, они могут использовать методы read и write.

Если ваша программа завершила работу с файлом, его следует закрыть с помощью функции close.

 

Текстовые и двоичные файлы.

Любой файл, содержащий символьную информацию, которую можно на каком-либо языке прочитать и осмыслить, т. е. рассчитанную на восприятие ее человеком, можно называть текстовым файлом (text file).

Строго говоря, абсолютно любой файл можно считать двоичным (бинарным) (binary file), так как всякий файл хранит информацию в двоичном коде. Это могут быть и машинные инструкции, и просто данные. Тем не менее, обычно, двоичным называют файл, содержание которого не рассчитано на восприятие человеком.

Двоичный (бинарный) файл — в широком смысле: последовательность произвольных байтов. Название связано с тем, что байты состоят из бит, то есть двоичных (англ. binary) цифр. Файл, часть содержимого (данных), которого закодировано битами (двочными числами).

В узком смысле слова двоичные файлы противопоставляются текстовым файлам. При этом с точки зрения технической реализации на уровне аппаратуры, текстовые файлы являются частным случаем двоичных файлов, и, таким образом, в широком значении слова под определение «двоичный файл» подходит любой файл.

Часто двоичными файлами называют исполняемые файлы и сжатые данные, однако так ограничивать это понятие не корректно.

 

Модель двоичного файла

Двоичный файл отличается от текстового тем, что данные в нем представлены во внутренней форме. А поскольку при внутреннем представлении используется двоичная система счисления, то «в честь ее» файлы и называются двоичными. По существу, двоичный файл является аналогом внутренней (оперативной, физической) памяти – неограниченным массивом байтов с возможностью непосредственного обращения (произвольного доступа) к любой его части.

Такая модель файла полностью совпадает с системой представлений, принятой в Си для работы с памятью на низком (физическом уровне).

Физическая память имеет байтную структуру – единицей адресации является байт.

Любая переменная занимает фиксированное количество байтов, определяемое ее типом. Операция sizeof возвращает эту размерность.

 

Выводы: Таким образом, рассмотрев все пункты теоретического введения, а именно абстрактный и полиморфный классы, указатели на базовый класс, виртуальные деструкторы, коллекцию объектов, статистический и динамический полиморфизм, member-функции и файловый ввод-вывод, можно смело приступить к разработке программы.


 

АРХИТЕКТУРА ПРОЕКТА

Структура проекта может быть представлена моделями двух типов: логической и физической. Логическая модель отражает классы, связь между ними, а область рассмотрения обычно ограничена теми классами, которые отражают предметную область. В качестве средства отображения используют UML-диаграммы.

 

Логическая модель представлена на рисунке 3.1.

Рис. 3.1 – Диаграмма классов для представления


 

Модульная структура проекта представлена на рисунке 3.2.

 

Рис. 3.2 – Модульная структура проекта

 

Выводы: в результате проектирования были построены модели двух типов: логической и физической. Логическая модель включает в себя абстрактный класс Vehicle и три дочерних классаCar, Bicycle и Lorry. В свое время физическая модель включает в себя модульную структуру проекта.


ОПИСАНИЕ ГЛАВНОЙ ПРОГРАММЫ

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

Функция KursV2T1()

Функция KursV2T1() служит точкой входа в программу.

Блок-схема изображена на рисунке 4.1.

Рисунок 4.1 – Алгоритм выполнения функции KursV2T1()



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 308; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.134.193 (0.014 с.)