Перегрузка пробела
Как бы я не ненавидел C, Страуструп всё-таки крутой перец.
Лирическое отступление. Так вышло, что в среду мне надо будет читать лекцию по перегрузке операторов в C++. Сейчас я ищу разную информацию по этой теме. Вообще, help wanted (and appreciated), поэтому если кто-то знает, где есть что-то не самое банальное, то он может смело со мной своими знаниями поделиться.
Как просто перегрузить плюс и минус понятно всем. Вопрос в том, как (и зачем) можно перегрузить операторы вроде −> или []. Интересно, можно ли (и что за это будет) написать
virtual Complex operator + (Complex a, Complex b) {
return Complex (a.Re + b.Re, a.Im + b.Im);
}
или даже
virtual Complex operator + (Complex a, Complex b) = 0;
Конец лирического отступления.
Я нашел очень интересную статью Страуструпа (PDF, 32 KB) про перегрузку оператора пробел и даже оператора отсутствие пробела, чтобы можно было писать
int a, b, t;
t = ab;
Надеюсь про перегрузку проблеа ясно что это шутка?
Минимальная необходимая инфа о перегрузке есть и в «Языке программирования C++» Страуструпа, 2его и далее изданий.
!!virtual Complex operator + (Complex a, Complex b) {
return Complex (a.Re + b.Re, a.Im + b.Im);
}
или даже
virtual Complex operator + (Complex a, Complex b) = 0;!!
Написать можно, и значить это будет как раз то, что написано. (Масло мас...) Конечно, при условии что это будут члены классов — просто виртуальных функций в плюсовой природе не встречается.
Зачем перегружать ->, [] — что бы делать умные указатели и собственный контейнеры. Смотрите vector, map, auto_ptr из STL. Про умные указатели ещё можно почитать, например, здесь: http://kalinin.ru/programming/cpp/27_07_00.shtml.
Про перегрузку пробела неясно, что это шутка. Почему бы и нет?
Ссылка не поставилась, не знаю почему.
Вот plaintext-ом: http://kalinin.ru/programming/cpp/27_07_00.shtm
За цитату тоже извиняюсь — на моём любимом форуме она ставится именно так, так что я по привычке [q] брякнул.
И с изданиями «языка» я налажал — с 3его и далее, второее крайне противопоказано самим же Страуструпом. Прошу прощения за неточность.
На дату документа (pdf) о перегрузке пробела посмотреть достаточно что бы понять что это шутка. Первоапрельская.
Я об этом даже на «любимом форуме» <a href=http://forum.oszone.net/topic.cgi?forum=18&topic=27&start=0#0>писал</a> уже два года назад...
про перегрузку операторов
(зачем нужно)
есть книжка:
Дж. Элджер
«С++: библиотека программиста».
(J. Alger «С++ for real programmers»)
В качестве хорошей книжки по С++ стоит упомянусть
Bruce Eckel «Thinking in C++»
доступна по адресу:
http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html