Определение и перегрузка операторов класса в C++ | Разработка игровых платформ
  1. Доброго времени суток. В связи с появлением спамеров, активация функций новых пользователей (Создавать темы, писать сообщения), теперь будет только после проверки администратором! Для регистрации отписываемся в лс, в вк. vk.com/tehnik777 (Пишем только с реальных страниц)
    Скрыть объявление

Определение и перегрузка операторов класса в C++

Тема в разделе "С++/С#, HTML, PHP, JavaScript, XML...", создана пользователем Zloy_Enot, 6 ноя 2016.

Обсуждение темы Определение и перегрузка операторов класса в C++ в разделе С++/С#, HTML, PHP, JavaScript, XML... на форуме zetta-forum.ru.

  1. Zloy_Enot

    Zloy_Enot Модератор

    Регистрация:
    31 окт 2016
    Сообщения:
    26
    Симпатии:
    13
    Баллы:
    3
    Пол:
    Мужской
    Адрес:
    Калининград
    В C++ можно определять пользовательские операторы для собственных типов данных. Оператор определяется, как обычная функция-член класса, только после определения возвращаемого типа ставится ключевое слово operator.

    Пример определения оператора сложения:


    Код:
    int operator+ (int value) { return number + value; }
    

    Оператор может быть унарным или бинарным. Унарный оператор не принимает никаких аргументов. Например, оператор отрицания — «!». Бинарный оператор принимает дополнительный параметр. Например, в случае со сложением, принимается второе слагаемое.

    Чтобы прояснить картину, попробуем написать класс simple_fraction, который будет описывать простую дробь с целыми числителем и знаменателем. И определим операторы сложения, вычитания, умножения и деления для этого класса.


    Код:
    /*
     * Класс, описывающий простую дробь
    */
    class simple_fraction
    {
    public:
        simple_fraction(int numerator, int denominator)
        {
            if (denominator == 0) // Ошибка деления на ноль
                throw std::runtime_error("zero division error");
            this->numerator = numerator;
            this->denominator = denominator;
        }
    
        // Определение основных математических операций для простой дроби
        double operator+ (int val) { return number() + val; } // Сложение
        double operator- (int val) { return number() - val; } // Вычитание
        double operator* (int val) { return number() * val; } // Умножение
        double operator/ (int val) // Деление
        {
            if (val == 0) {
                throw std::runtime_error("zero division error");
            }
            return number() / val;
        }
    
        // Получение значения дроби в виде обычного double-числа
        double number() { return numerator / (double) denominator; }
    private:
        int numerator; // Числитель
        int denominator; // Знаменатель
    };
    [/code
    
    Для операции деления, мы также сделали проверку деления на ноль.
    
    Пример использования класса simple_fraction:
    
    
    
    
    Код:
    // Простая дробь 2/3
    simple_fraction fr(2, 3);
    
    double sum = fr + 10; // сумма
    double diff = fr - 10; // разность
    double factor = fr * 10; // произведение
    double div = fr / 10; // частное
    
    Операторы можно перегружать так же, как и обычные функции-члены класса. Например, можно перегрузить оператор сложения для двух простых дробей, который будет возвращать новую простую дробь. Тогда, нам придется привести дроби к общему знаменателю и вернуть другую простую дробь. Задание: усовершенствуйте класс simple_fraction. Перегрузите операторы сложения, вычитания, умножения и деления так, чтобы можно было производить операции над двумя простыми дробями и получать новую простую дробь. Реализуйте приведение двух дробей к общему знаменателю. Пример использования будущего класса:
    Код:
    simple_fraction fr1(2, 3);
    simple_fraction fr2(3, 4);
    
    // 2/3 + 3/4 — это 17/12
    simple_fraction sum = fr1 + fr2;
    
     

Поделиться этой страницей