Главная » C++ энциклопедия » П » Перегрузка операторов в форме внешних функций
Категория: C++ энциклопедия » П
  • 0

22 янв 2012

Автор: admin

Чтобы перегрузить оператор в форме внешней функции, необходимо определить глобальную функцию.
class String { 
friend String& operator+(const String&, const String&);
private:
char* s ;
public:
// К онструкторы и т.д.
}
String& operator+(const String& s1, const String& s2)
{
char* s = new char[strlen(s1.s) + strlen(s2.s) + 1];
strcat(s, s 1.s, s 2.s);
String n ewStr(s);
delete s ;
return n ewStr;
}
String s1 = “Hello”;
String s2 = “Goodbye”;
String s3 = s1 + s2;

Перегруженная функция выглядит так же, как и любая глобальная функция (если не считать странного имени). Именно для таких случаев и были придуманы друзья. Если бы мы не объявили функцию operator+ другом, то она не имела бы доступа к переменной s, и мы оказались бы перед выбором: то ли разрешить всем на свете доступ к char*, то ли перейти к менее эффективной реализации, при которой строка копируется при каждом обращении к ней. С концептуальной точки зрения operator+ является частью библиотеки String, поэтому нет ничего страшного в том, чтобы объявить эту функцию другом и вручить ей ключи к внутреннему устройству String.

Внешними функциями могут перегружаться любые операторы, кроме операторов преобразования, =, [], () и -> — все эти операторы должны перегружаться только функциями класса.
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.