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

В 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.

Добавить комментарий для proginfo Отменить ответ

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

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