Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 40030.doc
Скачиваний:
8
Добавлен:
30.04.2022
Размер:
178.18 Кб
Скачать

Практическая работа № 4 перегрузка операторов

1. Общие указания по работе

Цель работы: Приобрести перегрузки операторов в среде C++.

2. Методические указания по их выполнению

2.1. Изучить теоретический материал по теме лабораторной работы.

Теоретическое введение

Перегрузка оператора состоит в изменении смысла оператора (например, оператора плюс (+), который обычно в C++ используется для сложения) при использовании его с определенным классом. Когда перегружается оператор для какого-либо класса, то смысл данного оператора не изменяется для переменных других типов. Когда компилятор С++ встречает в программе оператор, то на основании типа переменной он определяет ту операцию, которая должна быть выполнена. При перегрузке оператора используется ключевое слово C++ operator вместе с прототипом и определением функции, чтобы сообщить компилятору C++, что класс будет использовать этот метод как оператор. Например, следующее определение класса использует ключевое слово operator, чтобы назначить операторы плюс и минус функциям str_append и chr_minus внутри класса string:

class string

{

public:

string(char *); // Конструктор

void operator +(char *);

void operator -(char); ————— Определение операторов класса void show_string(void);

private:

char data[256];

};

Когда класс перегружает оператор, он должен указать функцию, которая реализует операцию, соответствующую этому оператору. В случае оператора плюс определение такой функции становится следующим:

void string::operator +(char *str)

{

strcat(data, str);

}

    1. Выполнить практические задания:

1. Создать класс «множество целых чисел» с методом вывода множества на экран. Перегрузить операторы + и * таким образом, чтобы они выполняли соответственно сложение и пересечение множеств.

Практическая работа № 5

АБСТРАКТНЫЕ КЛАССЫ

1. Общие указания по работе

Цель работы: Приобрести навыки работы с абстрактными классами в среде C++.

2. МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ИХ ВЫПОЛНЕНИЮ

2.1. Изучить теоретический материал по теме лабораторной работы.

Теоретическое введение

Абстрактные классы

Базовый класс иерархии типа обычно содержит ряд виртуальных функций, обеспечивающих динамическую типизацию. Часто в базовом классе эти виртуальные функции фиктивны и имеют пустое тело. Эти функции существуют как некоторая абстракция, конкретное значение им придается в производных классах. Такие функции называются чисто виртуальными функциями, то есть такими, тело которых, как правило, не определено. Общая форма записи чисто виртуальной функции имеет вид:

virtual прототип функции = 0;

Чисто виртуальная функция используется для того, чтобы отложить решение о реализации функции. То, что функция объявлена чисто виртуальной, требует, чтобы эта функция была определена во всех производных классах от класса, содержащего эту функцию. Если класс имеет хотя бы одну чисто виртуальную функцию, то он называется абстрактным. Для абстрактного класса нельзя создать объекты и он используется только как базовый класс для других классов. Если base – абстрактный класс, то для инструкций компилятор выдаст сообщение об ошибке.

base a;

base *p= new base;

В то же время вполне можно использовать инструкции вида

rect b;

base *p=&b;

base &p=b;

Чисто виртуальную функцию, как и просто виртуальную функцию, не обязательно переопределять в производных классах. При этом если в производном классе она не переопределена, то этот класс тоже будет абстрактным, и при попытке создать объект этого класса компилятор выдаст ошибку. Таким образом, забыть переопределить чисто виртуальную функцию невозможно. Абстрактный базовый класс навязывает определенный интерфейс всем производным от него классам. Главное назначение абстрактных классов – в определении интерфейса для некоторой иерархии классов. Класс можно сделать абстрактным, даже если все его функции определены. Это можно сделать, например, чтобы быть уверенным, что объект этого класса создан не будет. Обычно для этих целей выбирается деструктор.

class base

{ компоненты-данные

public:

virtual ~base() = 0;

компоненты-функции

}

base ::~base()

{реализация деструктора}

Объект класса base создать невозможно, в то же время деструктор его определен и будет вызван при разрушении объектов производных классов. Для иерархии типа полезно иметь базовый абстрактный класс. Он содержит общие свойства порожденных объектов и используется для объявления указателей, которые могут обращаться к объектам классов, порожденным от базового.

    1. Выполнить практические задания:

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

2. Создать абстрактный базовый класс Person, который хранит информации об имени, возрасте человека. От него наследовать классы Student, Teacher. Класс Student имеет дополнительную информацию – номер группы. Класс Teacher – стаж. Создать чистую виртуальную функцию вывода на экран информации о человеке, отображающую все данные о человеке, включая номер группы у студента и стаж у преподавателя.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]