Основные теоретические положения
Стр 1 из 2Следующая ⇒ Объектно-ориентированное
Программирование
Лабораторный практикум
Часть 2 Учебно-методическое пособие Специальность: 230105 Программное обеспе- чение вычислительной техники и автоматизи- рованных систем
череповец
Рассмотрено на заседании кафедры программного обеспечения ЭВМ, протокол № 9 от 10.04.07 г. Одобрено редакционно-издательской комиссией Инженерно-экономического института ГОУ ВПО «ЧГУ», протокол № 4 от 20.04.07 г.
Составители: Е.В. Ершов, канд. техн. наук, проф.; Л.Н. Виноградова;
Рецензенты: Е.В. Королева, канд. техн. наук (ЗАО «Фирма «Стоик», г. Череповец); К.М. Пышницкий (ГОУ ВПО «ЧГУ»)
Научный редактор: Е.В. Королева, канд. техн. наук
© Ершов Е.В., Виноградова Л.Н., Ганичева О.Г., 2007
© ГОУ ВПО «Череповецкий госу- дарственный университет», 2007
Введение
Данное учебно-методическое пособие содержит описание и порядок выполнения пяти лабораторных работ по дисциплине «Объектно-ориентированное программирование» и предназначено для изучения и практического освоения синтаксиса, базовых понятий и конструкций языка объектно-ориентированного программирования (ООП) С++, а также методов и средств технологии ООП – одной из основных и эффективных технологий для создания программного обеспечения и являющейся базовой технологией для подготовки профессиональных программистов. Задания в лабораторных работах выполняются с использованием системы визуального программирования С++ Builder. Каждую лабораторную работу необходимо выполнять в следующем порядке: 1. Разработать алгоритм решения в соответствии с заданием.
2. Составить программу решения задачи. 3. Осуществить отладку и тестирование программы. Отчет по лабораторной работе должен содержать: 1. Постановку задачи и исходные данные. 2. Блок-схему алгоритма решения задачи. 3. Программу на языке С++. 4. Протокол тестирования программы. При выполнении лабораторных работ в компьютерном классе необходимо соблюдать общие правила техники безопасности.
Лабораторная работа 6 ПЕРЕГРУЗКА ОПЕРАТОРОВ (4 часа)
Цель работы: изучить понятие перегрузки, приобрести практические навыки перегрузки отдельных операторов.
Основные теоретические положения 1. Определение перегрузки
Перегруженные функции - важная особенность языка С++. Перегружаемая функция выбирается в соответствии со списком параметров при обращении к функции и при объявлении функции. При вызове перегруженных функций компилятор должен иметь алгоритм для выбора соответствующей функции. Этот алгоритм зависит от того, какие преобразования типов доступны. Наилучшее соответствие должно быть уникально. Оно должно быть лучше всех, по крайне мере для одного параметра, а для всех остальных параметров так же хорошо, как любое другое соответствие. Алгоритм соответствия для каждого параметра следующий: 1. Использовать точное соответствие, если оно найдено. 2. Проверить поддержку стандартных типов. 3. Проверить стандартные преобразования типов. 4. Проверить преобразования, определяемые пользователем. 5. Использовать соответствие для аргументов, если оно найдено. Термин «перегрузка» относится к использованию одного и того же имени для множества значений функции. Перегрузка операторов позволяет абстрактному типу данных использовать синтаксис выражений С++, что существенно облегчает написание программ. Для перегрузки операторов используется ключевое слово
operator. При перегрузке операторов обычно используются или функции-члены или дружественные функции, которые имеют привилегированный доступ. Для перегрузки унарного оператора используется функция-член, имеющая пустой список аргументов, так как единственный аргумент оператора является неявным аргументом. Для бинарных операторов функция-член перегрузки оператора имеет в качестве первого аргумента неявно передаваемую переменную класса, а в качестве второго аргумента - единственный аргумент списка параметров. В дружественных и обычных функциях отсутствует неявный аргумент и они получают оба аргумента из списка параметров. Например:
vect operator *(const vect &,const matix &) где * является двухместным оператором умножения. matrix t; vect s,r; s=t*r; // s=mpy(r,t);
Перегруженный оператор можно вызвать и использованием функциональной формы записи:
s=operator*(t,r);
Для перегрузки доступны все арифметические, логические операторы, операторы сравнения, равенство, присвоение, префиксные и постфиксные формы операторов приращения и декремента, а также оператор индексации «[]» и оператор обращения к функции «()». Однако нельзя перегружать троичный условный оператор выражения «?:», оператор разрешения области видимости «::», оператор членства «.» и оператор селектора члена объекта «.*». Постфиксная перегруженная функция определяется с единственным целым аргументом. Например: class N { public: //постфикс ++ вызывается как n.operator++(0); void operator++(int); void operator—(int); };
Задания
1. Модифицируйте абстрактный тип данных, реализованный по заданию раздела V, согласно варианту задания (см. раздел III УМП_ООП_1.doc), перегрузив все доступные операторы. 2. Проверьте работоспособность АТД на тестовом наборе данных.
Контрольные вопросы
1. Назовите алгоритм соответствия для каждого аргумента. 2. С какой целью применяется перегрузка операторов? 3. Для каких операторов нельзя использовать перегрузку? 4. В каком случае используется функция-член, имеющая пустой список аргументов? 5. Что произойдет, если перегруженная операция [ ] будет иметь тип возвращаемого значения int, а не int&?
Лабораторная работа 7
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|