Главная страница
Навигация по странице:

  • Цель работы: Изучить механизм перегрузки операций. Практическое задание

  • Листинг программы

  • Ответы на контрольные вопросы: Для чего в С++ применяется перегрузка операций Ответ

  • Ответ

  • Практическая работа 4. Перегрузка операций.. Практическая работа 4 С++. Отчет по практической работе 4 по предмету Системное программирование


    Скачать 135.25 Kb.
    НазваниеОтчет по практической работе 4 по предмету Системное программирование
    АнкорПрактическая работа 4. Перегрузка операций
    Дата19.06.2022
    Размер135.25 Kb.
    Формат файлаdocx
    Имя файлаПрактическая работа 4 С++.docx
    ТипОтчет
    #603764



    ОТЧЕТ

    по практической работе 4

    по предмету

    «Системное программирование»


    Номер варианта: 13

    Санкт-Петербург

    2022

    1. Цель работы:

    Изучить механизм перегрузки операций.

    1. Практическое задание:

    Создать класс КОЛЬЦО (геометрическая фигура на плоскости) в прямоугольной системе координат OXY с центром в точке O(0,0), которая определяется двумя радиусами (R1, R2, R2>R1>0). Реализовать метод вывода на экран информации о кольце. Перегрузить бинарные операторы: пересечение двух колец (*), объединение двух колец (+), несимметрическая разность двух колец (-). Следует учесть, что результатом выполнения оператора может быть получено кольцо с равными радиусами (R1=R2), в этом случае следует сообщить об ошибке.

    1. Выполнение:

    Класс «Ring»



    Конструктор без параметров



    Конструктор с параметрами



    Конструктор копирования



    Деструктор



    Перегрузка оператора * (пересечение двух колец)



    Перегрузка оператора + (объединение двух колец)



    Перегрузка оператора – (несимметрическая разность двух колец)



    Метод print, который выводит данные



    Создать два кольца. Кольцо внутри другого. Выполнение все перегрузки оператора.

    \

    Создать два кольца. Выполнение все перегрузки оператора.



    Создать два кольца, так чтобы результатом выполнения одного из перегрузки оператора выводил нулевого радиуса (R1 = R2). Выполнение все перегрузки оператора.



    Демонстрация.



    1. Листинг программы:

    #include "pch.h"

    #include
    using namespace std;
    class Ring

    {

    private:

    double R1;

    double R2;

    public:
    Ring();

    Ring(double, double);

    Ring(const Ring& obj);

    Ring();

    Ring operator*(const Ring& ring);

    Ring operator+(const Ring& ring);

    Ring operator-(const Ring& ring);

    void print();

    };
    Ring::Ring()

    {

    R1 = 0;

    R2 = 0;

    }
    Ring::Ring(double r1, double r2)

    {

    if (r1 < r2)

    {

    R1 = r1;

    R2 = r2;

    }

    else if (r1 > r2)

    {

    R1 = r2;

    R2 = r1;

    }

    else

    {

    R1 = 0;

    R2 = 0;

    }

    }
    Ring::Ring(const Ring& obj)

    {

    R1 = obj.R1;

    R2 = obj.R2;

    }
    Ring::Ring(){}
    Ring Ring::operator*(const Ring& ring)

    {

    Ring newring;
    if (R1 != R2 && ring.R1 != ring.R2)

    {

    newring.R1 = (R1 < ring.R1) ? ring.R1 : R1;

    newring.R2 = (R2 > ring.R2) ? ring.R2 : R2;

    }

    else

    {

    newring.R1 = 0;

    newring.R2 = 0;

    }
    return newring;

    }
    Ring Ring::operator+(const Ring& ring)

    {

    Ring newring;
    if (R1 != R2 && ring.R1 != ring.R2)

    {

    newring.R1 = (R1 > ring.R1) ? ring.R1 : R1;

    newring.R2 = (R2 < ring.R2) ? ring.R2 : R2;

    }

    else

    {

    newring.R1 = 0;

    newring.R2 = 0;

    }
    return newring;

    }
    Ring Ring::operator-(const Ring& ring)

    {

    Ring newring;

    if (R1 > ring.R1 && R2 < ring.R2)

    {

    newring.R1 = 0;

    newring.R2 = 0;

    }

    else if (R1 < ring.R1 && R2 > ring.R2)

    {

    newring.R1 = ring.R2;

    newring.R2 = R2;

    }

    else if (R1 == R2 || ring.R1 == ring.R2)

    {

    newring.R1 = 0;

    newring.R2 = 0;

    }

    else

    {

    if (R2 > ring.R2)

    {

    newring.R1 = (R1 > ring.R2) ? R1 : ring.R2;

    newring.R2 = R2;

    }

    else

    {

    newring.R1 = R1;

    newring.R2 = (R2 < ring.R1) ? R2 : ring.R1;

    }

    }
    return newring;

    }
    void Ring::print()

    {

    if (R1 == R2 || R1 < 0 || R2 < 0)

    {

    cout << "Кольцо не существует!" << endl << endl;

    }

    else

    {

    cout << "R1 = " << R1 << "\tR2 = " << R2 << endl << endl;

    }

    }
    int main()

    {

    setlocale(LC_ALL, "rus");

    Ring ring1(5, 10), ring2(6, 7);

    cout << "Ring 1" << endl;

    ring1.print();

    cout << "Ring 2" << endl;

    ring2.print();
    cout << "Ring 1 - Ring 2" << endl;

    (ring1 - ring2).print();

    cout << "Ring 2 - Ring 1" << endl;

    (ring2 - ring1).print();

    cout << "Ring 1 + Ring 2" << endl;

    (ring1 + ring2).print();

    cout << "Ring 1 * Ring 2" << endl;

    (ring1 * ring2).print();
    Ring ring3(5, 10), ring4(8, 15);

    cout << endl << endl << "Ring 3" << endl;

    ring3.print();

    cout << "Ring 4" << endl;

    ring4.print();
    cout << "Ring 3 - Ring 4" << endl;

    (ring3 - ring4).print();

    cout << "Ring 4 - Ring 3" << endl;

    (ring4 - ring3).print();

    cout << "Ring 3 + Ring 4" << endl;

    (ring3 + ring4).print();

    cout << "Ring 3 * Ring 4" << endl;

    (ring3 * ring4).print();
    Ring ring5(5, 10), ring6(10, 15);

    cout << endl << endl << "Ring 5" << endl;

    ring5.print();

    cout << "Ring 6" << endl;

    ring6.print();
    cout << "Ring 5 - Ring 6" << endl;

    (ring5 - ring6).print();

    cout << "Ring 6 - Ring 5" << endl;

    (ring6 - ring5).print();

    cout << "Ring 5 + Ring 6" << endl;

    (ring5 + ring6).print();

    cout << "Ring 5 * Ring 6" << endl;

    (ring5 * ring6).print();

    }

    1. Ответы на контрольные вопросы:

      1. Для чего в С++ применяется перегрузка операций?

    Ответ: Чтобы переопределить алгоритм действий при использовании операций к объекту класса.

      1. Истинно ли следующее утверждение: операция >= может быть перегружена?

    Ответ: Да.

      1. Сколько аргументов требуется для определения перегруженной унарной операции?

    Ответ: Один аргумент.

      1. Сколько аргументов требуется для определения перегруженной бинарной операции?

    Ответ: Два аргумента.

      1. Чем отличается действие операции ++ в префиксной форме от её действия в постфиксной форме?

    Ответ: Префиксный оператор проводит операцию, затем возвращает значение, а постфиксный возвращает значение переменной, затем проводит операцию.

      1. Истинно ли следующее утверждение: перегруженная операция всегда требует на один аргумент меньше, чем количество операндов?

    Ответ: .Нет.

      1. Когда перегружается операция арифметического присваивания, то результат

    a. Передается объекту справа от операции

    b. Передается объекту слева от операции

    c. Передается объекту, вызвавшему операцию

    d. Должен быть возвращен

    Ответ: Передается объекту слева от операции (b).

      1. Истинно ли следующее утверждение: компилятор не выдаст сообщение об ошибке, если вы перегрузите операцию * для выполнения деления?

    Ответ: Да.

      1. Существуют ли операции, которые нельзя перегружать?

    Ответ: Да.


    написать администратору сайта