2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 перегрузка оперций
Сообщение04.06.2009, 19:55 
Люди подскажите пожалуйста почему в C++ операции =,(),[] и -> можно перегружать только как методы класса.

Или подскажите литературу где моно почитать?

 
 
 
 Re: перегрузка оперций
Сообщение05.06.2009, 08:56 
Аватара пользователя
INDIGO1991 в сообщении #219688 писал(а):
Люди подскажите пожалуйста почему в C++ операции =,(),[] и -> можно перегружать только как методы класса.

Надо начать с того, что изначально в первых версия C++ не было понятия дружественных функций и все перегрузки делались как члены класса. Потом Страуструп заметил, что некоторым операторам (типа operator+ и др. арифметическим) желательно иметь "симметричность" относительно операндов и, в конце концов, он не нашел ничего лучшего как придумать дружественные функции. Так что к твоему вопросу надо подходить с другого конца: не "почему указанным операторам нельзя быть друзьями класса", а "почему другим операторам разрешили быть друзьями" (на это я ответил выше).
Операторы [], () и -> всегда относятся к левому операнду, если бы им позволили быть друзьями, то это не создало бы ничего, кроме глупых и, возможно, труднонаходимых ошибок, поэтому Страуструп позаботился о программистах и разрешил этим операторам быть только членами класса.

INDIGO1991 в сообщении #219688 писал(а):
Или подскажите литературу где моно почитать?

Б. Страуструп, Дизайн и эволюция C++. Ну и егошный учебник, конечно.

 
 
 
 Re: перегрузка оперций
Сообщение06.06.2009, 11:45 
спасибо

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group