- •Введение
- •Общая постановка задачи
- •Детальная постановка задачи
- •Описание предметной области
- •Теоретическое введение
- •Что такое тестирование?
- •Преимущества
- •Ограничения
- •План модульного тестирования
- •План ют:
- •Абстрактный класс, его назначение и основные характеристики.
- •Приложения модульного тестирования Экстремальное программирование
- •Полиморфный класс, его назначение и основные характеристики
- •Указатели на базовый класс. Их свойства
- •Статический и динамический полиморфизм. Понятие о раннем и позднем связывании member-функций.
- •Статический и динамический полиморфизм
- •Понятие о раннем связывании member-функций.
- •Понятие о позднем связывании member-функций.
- •Использование позднего статического связывания
- •Файловый ввод-вывод.
- •Текстовые и двоичные файлы.
- •Архитектура проекта
- •Тестирование
- •Тестирование взаимодействия классов
- •5.1.1 Тесты
- •Тестирование взаимодействия классов в составе динамической коллекции
- •Тестирование всех задач заданных по варианту
- •Usability тестирование
- •Проведение тестирования
- •Приложение а. Листинги исходных кодов
- •Приложение б. Результат работы программы (режим debug)
- •Приложение в. Результат работы программы (режим release)
Понятие о раннем связывании member-функций.
Связывание — это сопоставление вызова функции с телом. В приведенных ранее примерах связывание выполняется на этапе трансляции (до запуска) программы. Такое связывание обычно называют ранним, или статическим.
Раннее связывание использовалось во всех функциях и методах наших программ за исключением тех случаев, где мы использовали указатели на функции.
Компилятор просматривает исходный код и превращает все операторы в команды процессора. Допустим, в коде встречается вызов какой-нибудь функции:
someFunction(arg); // some - какой-то
Если это обычная функция (не указатель на функцию), то при вызове используется механизм раннего связывания.
Во время компиляции для кода (определения) функции выделяется память, и назначаются адреса для каждого оператора. Первый адрес в определении (теле функции) является адресом функции. При вызове someFunction, процессор будет переходить на адрес функции и начнёт выполнять тело функции. Самое важное здесь то, что адрес функции назначается во время компиляции, и именно этот адрес используется при вызове функции. Это и есть раннее или статичное связывание. Т.е. имя функции крепко привязано к адресу функции.
Понятие о позднем связывании member-функций.
Называется поздним статическим связыванием, которое может быть использована для того чтобы получить ссылку на вызываемый класс в контексте статического наследования.
Самоназвание "позднее статическое связывание" отражает в себе внутреннюю реализацию этой особенности. "Позднее связывание" отражает тот факт, что обращения через static не будут вычисляться по отношению к классу, в котором вызываемый метод определен, а будут вычисляться на основе информации в ходе исполнения. Также эта особенность была названа "статическое связывание" потому, что она может быть использована (но не обязательно) в статических методах.
Использование позднего статического связывания
Позднее статическое связывание пытается устранить это ограничение предоставляя ключевое слово, которое ссылается на класс, вызванный непосредственно в ходе выполнения. Было решено не вводить новое ключевое слово, а использовать static, которое уже зарезервировано.
Файловый ввод-вывод.
Заголовочный файл fstream.h определяет классы ifstream и ofstream, с помощью которых ваша программа может выполнять операции файлового ввода и вывода.
Для открытия файла на ввод или вывод вы должны объявить объект типа ifstream или ofstream, передавая конструктору этого объекта имя требуемого файла.
После того как ваша программа открыла файл для ввода или вывода, она может читать или писать данные, используя операторы извлечения (>>) и вставки (<<).
Ваши программы могут выполнять ввод или вывод символов в файл или из файла, используя функции get и put.
Ваши программы могут читать из файла целую строку, используя функцию getline.
Большинство программ читают содержимое файла, пока не встретится конец файла. Ваши программы могут определить конец файла с помощью функции eof.
Когда ваши программы выполняют файловые операции, они должны проверять состояние всех операций, чтобы убедиться, что операции выполнены успешно. Для проверки ошибок ваши программы могут использовать функцию fail.
Если вашим программам необходимо вводить или выводить такие данные, как структуры или массивы, они могут использовать методы read и write.
Если ваша программа завершила работу с файлом, его следует закрыть с помощью функции close.
