Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2463.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
387 Кб
Скачать
☆

Выполнение лабораторной работы

Для выполнения работы необходимо:

  • формализовать задачу;

  • составить описание класса;

  • составить алгоритм для каждого метода, описанного в классе, и определить все методы;

  • создать объекты описанного типа;

  • разработать набор тестов, на которых будет проверяться программа;

  • продемонстрировать работу программы на наборе тестов;

  • оформить работу и отчитаться по ней.

Методические указания к выполнению лабораторной работы

Задание

Реализовать класс натуральное число в Р-ичной системе счисления (2 < Р < 9). Класс должен содержать методы:

  • конструктор без аргументов, конструктор инициализации и конструктор по умолчанию.

И перегружать операции:

  • сложение; вычитание; умножение; деление;

  • отношения (равно, не равно, больше, меньше).

Выполнение

Перегрузка операций не является обязательной в объектно-ориентированном программировании. Однако наличие перегрузки операций в C++ обеспечивает дополнительный уровень удобства при использовании новых типов данных.

При перегрузке операции нужно учитывать следующие ограничения.

1. Запрещена перегрузка следующих операций:

- sizeof() – определение размера аргумента;

- . (точка) – селектор компонента объекта;

- ?: – условная операция;

- :: – указание области видимости;

- * – выбор компонента класса через указатель;

- # и ## – операции препроцессора.

2. Операции можно перегружать только для нового типа данных – нельзя перегрузить операцию для встроенного типа.

3. Нельзя изменить приоритет перегружаемой операции и количество операндов. Унарная операция обязана иметь один операнд, бинарная – два операнда; не разрешается использовать параметры по умолчанию. Единственная операция, которая не имеет фиксированного количества операндов, – это операция вызова функции (). Операции «+», «–», «*», «&» допускается перегружать и как унарные, и как бинарные.

4. Операции можно перегружать либо как независимые внешние функции (только такой способ перегрузки допустим для enum), либо как методы класса.

Четыре операции:

- присваивания =;

- вызова функции ();

- индексирования [];

- доступа по указателю ->;

допускается перегружать только как методы класса. Эти операции в принципе нельзя перегрузить для конструкции enum.

5. Если операция перегружается как метод класса, то левым (или единственным) аргументом обязательно будет объект класса, для которого перегружается операция.

Прототип функции-операции выглядит следующим образом:

тип operator@(список параметров);

где @ – символ операции. Слово operator является зарезервированным словом и может использоваться только в определении или в функциональной форме вызова операции.

Перегрузка операций внешними функциями

Прототип бинарной операции, перегружаемой как внешняя независимая функция, выглядит так:

тип operator@(параметр1, параметр2);

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

тип operator@(параметр1, параметр2);

тип operator@( параметр2, параметр1);

Хотя бы один из параметров должен быть нового типа. Параметры можно передавать любым допустимым способом. Обращение к операции выполняется двумя способами:

- инфиксная форма параметр1 @ параметр2;

- функциональная форма operator@ (параметр1, параметр2).

Операции инкремента ++ и декремента -- имеют две формы: префиксную и постфиксную. В определении постфиксной формы операции должен быть объявлен дополнительный параметр типа int.

тип operator@( параметр, int);

Этот параметр не должен использоваться в теле функции. Инфиксная форма обращения к такой операции – параметр@; при функциональной форме обращения необходимо задавать второй фиктивный аргумент, например

operator@(параметр,0);

Пример перегрузки операций для перечислимого типа.

// перечислимый тип

enum Week { mon = 1, tue, wed, thu, fri, sat, sun = 0 };

Week operator+(const Week &m, const int &b)

{ Week t = Week(b + m);

return (Week(t%7));

}

// вторая функция для коммутативности сложения

Week operator+(const int &b, const Week &m)

{

return (m+b);

}

Week operator++(Week &m) // префиксная форма

{

return (Week(m+1));

}

Week operator++(Week &m, int) // постфиксная форма

{

Week t = m;

m = Week(m+1);

return t;

}

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