Перегрузка пробела

Как бы я не ненавидел 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;
Подписаться на блог
Отправить
Дальше
5 комментариев
ivank 2003

Надеюсь про перегрузку проблеа ясно что это шутка?

Минимальная необходимая инфа о перегрузке есть и в «Языке программирования 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.

Илья Бирман

Про перегрузку пробела неясно, что это шутка. Почему бы и нет?

ivank 2003

Ссылка не поставилась, не знаю почему.

Вот plaintext-ом: http://kalinin.ru/programming/cpp/27_07_00.shtm

За цитату тоже извиняюсь — на моём любимом форуме она ставится именно так, так что я по привычке [q] брякнул.

ivank 2003

И с изданиями «языка» я налажал — с 3его и далее, второее крайне противопоказано самим же Страуструпом. Прошу прощения за неточность.

ivank 2003

На дату документа (pdf) о перегрузке пробела посмотреть достаточно что бы понять что это шутка. Первоапрельская.

Я об этом даже на «любимом форуме» <a href=http://forum.oszone.net/topic.cgi?forum=18&topic=27&start=0#0>писал</a> уже два года назад...

ambitus 2003

про перегрузку операторов
(зачем нужно)
есть книжка:
Дж. Элджер
«С++: библиотека программиста».
(J. Alger «С++ for real programmers»)

В качестве хорошей книжки по С++ стоит упомянусть
Bruce Eckel «Thinking in C++»
доступна по адресу:

http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html

Мои книги