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

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

Настоящий класс ostream определяет операцию

Чтобы определить @, где @ – некоторая операция языка C++,
для каждого определяемого пользователем типа вы определяете функцию с именем
operator@, которая получает параметры соответствующего типа. Например:

class ostream {

  //…

  ostream
operator

};

ostream ostream::operator

{

  while (*p)
buf.sputc(*p++);

  return *this;

}

определяет операцию

а если применить операцию взятия адреса, то вы получите
адрес объекта, на который ссылается ссылка:

&s1 == &my_out

Первая очевидная польза от ссылок состоит в том, чтобы
обеспечить передачу адреса объекта, а не самого объекта, в функцию вывода (в
некоторых языках это называется передачей параметра по ссылке):

ostream& operator

  return s

}

Достаточно интересно, что тело функции осталось без
изменений, но если вы будете осуществлять присваивание s, то будете
воздействовать на сам объект, а не на его копию. В данном случае то, что
возвращается ссылка, также повышает эффективность, поскольку очевидный способ
реализации ссылки – это указатель, а передача указателя гораздо дешевле, чем
передача большой структуры данных.

Ссылки также существенны для определения потока ввода,
поскольку операция ввода получает в качестве операнда переменную для
считывания. Если бы ссылки не использовались, то пользователь должен был бы
явно передавать указатели в функции ввода.

class istream {

  //…

  int state;

public:

  istream&
operator>>(char≈);

  istream&
operator>>(char*);

  istream&
operator>>(int&);

  istream&
operator>>(long&);

  //…

};

Заметьте, что для чтения long и int используются разные
функции, тогда как для их печати требовалась только одна. Это вполне обычно, и
причина в том, что int может быть преобразовано в long по стандартным правилам
неявного преобразования, избавляя таким образом программиста от беспокойства по
поводу написания обеих функций ввода.
Список литературы

Для подготовки данной работы были использованы материалы
с сайта http://www.realcoding.net