Перегрузка операций

В C++ можно перегружать не только функции, но и операции. Таким способом гораздо удобнее вносить какие-либо действия привычным методом записи. Например, можно организовать перемножение матриц с помощью * или сложение комплексных чисел с помощью +.

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

В данном примере мы перегружаем оператор +, заставляя его складывать 2 переменных класса MyClass заданным нами образом. В итоге, если в классе встретится конструкция a+b, где a и b – экземпляры MyClass, то операция будет совершаться, как показано выше в примере. Во всех остальных случаях оператор + будет выполняться обычным образом.

На такую перегрузку действует ряд ограничений :

  1. Перегружать можно только уже используемые операторы. Нельзя ввести новые.
  2. Нельзя перегрузить операторы для уже существующих типов данных, так, например, нельзя перегрузить сложение целых чисел.
  3. Нельзя изменять синтаксис операций – из унарной делать бинарную, менять место оператора в выражении.
  4. Ряд символов перегрузить нельзя: . , .* , ?: , :: , sizeof и #.

    Запрос услуг репетитора:

    Опубликовано

    Перегрузка операций: 3 комментария

    1. А что насчет перегрузки операторов ввода/вывода? Я сейчас изучаю раздел о перегрузке сin и cout. Не очень понятно, как это работает, если использовать в перегруженной операции объекты ostream и istream (передача параметров - по ссылке).

      1. Для этого используют друзей. В классе пишут:
        friend ostream& operator<<(ostream& cout, MyClass& MyClass);
        friend istream& operator>>(istream& cin, MyClass& MyClass);
        и пишут вне классов глобально:

        ostream& operator<<(ostream& cout, MyClass& MyClass)
        {
        cout<<sizeOfArray;//и т.д.
        return cout;
        }
        istream& operator>>(istream& cin, MyClass& MyClass)
        {
        cin>>sizeOfArray;//и т.д.
        return cin;
        }

    2. Операции можно перегружать только для нового типа данных - нельзя перегрузить оперецию для встроенного типа.
      В С++ новый тип данных можно образовать с помощью конструкций enum, union,struct и class.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Капча загружается...