Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Проблемы с понимаем перезагрузки операторов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Файлы на с++ http://www.cyberforum.ru/cpp-beginners/thread582582.html
Здравствуйте ! Начал осваивать файлы, но столкнулся с проблемой, при записи в файл, туда записываются символы типа : 4324423Њ®бўдлў 43242423423¬®бЄў* 543765ўдлўдл 4343Њ®бЄў* 43423©®Їв*...
C++ Необходимо внести небольшие поправки в программу, не могу найти ошибку Здравствуйте, уважаемые! Прошу помочь "допилить" программку до конца, ибо уже не знаю что делать.:cry: Прошу, пожалуйста ,дочитать задание. )) Возникла проблема с программой суть которой... http://www.cyberforum.ru/cpp-beginners/thread582570.html
Открытие файла через ехешник C++
Здравствуйте. Такой вопрос есть. Нужно разработать приложение, которое отображает параметры (package: name и launchable-activity: name ) из файла AndroidManifest.xml, который находится в файле...
C++ Заменить в тексте каждое вхождение...
Заменить в тексте каждое вхождение константы "1" словом "odin". Предполагается, что текст записан в файле input.txt. Результат выводится на экран. Задание выполнить в двух вариантах: со строками...
C++ Курсовая по C++ http://www.cyberforum.ru/cpp-beginners/thread582491.html
Получить спортивный мультфильм: а)о метании диска; б)о беге с барьерами; в)о прышках в длину; г)о подтягивании на перекладине; д)о поднятии штанги; любой из вариантов лучше на С++
C++ Даны натуральные числа А,В,С Даны натуральные числа А,В,С, которые обозначают число, месяц и год. Получить тройку чисел, соответствующих следующему дню. Заранее огромнейшее спасибо, походу думаю разбирусь Добавлено через 5... подробнее

Показать сообщение отдельно
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.05.2012, 12:15
No10, раз вы его не создавали, но он есть, то можно было бы догадаться, что он библиотечный. Это базовый класс для всех потоков вывода.
Ваша проблема в том, что вы воспринимаете перегруженные операторы как нечто совершенно обособленное от всего остального. На самом деле это совершенно обычные функции с несколько необычным именем. И подчиняются тем же правилам, что и остальные функции. Единственное исключение - они должны принимать количество аргументов, равное количеству операндов оператора (при перегрузке в виде глобальной функции) или на единицу меньшее (при перегрузке в виде метода класса). Ну и хотя бы один из аргументов должен быть объектом какого-либо класса (т.е. нельзя перегрузить оператор сложения для двух интов).
Из вашего оператора << теоретически можно было бы возвращать и void, но тогда нельзя было бы написать так:
C++
1
std::cout << my_obj1 << my_obj2;
поскольку в результате выполнения первого вывода (т.е. применения оператора << к объектам std::cout и my_obj1) не остаётся объекта, который можно было бы передать в operator<< в качестве первого аргумента. Потому мы и возвращаем из него ссылку на поток, который был ему передан при вызове. Фактически указанный выше вывод выполняется в несколько этапов:
1. Вызывается operator<<, принимающий std::cout и my_obj1
2. В результате этого вызова возвращается ссылка на поток, который был передан при вызове - на std::cout
3. Полученная ссылка снова передаётся во второй вызов operator<< в качестве первого аргумента, а my_obj2 - в качестве второго.
Вот так каскадно и вызывается оператор << для каждого вывода.
Если углубиться, то можно сказать, что компилятор при применении перегруженного оператора заменяет его вызов на явный вызов функции (метода). Т.е. если вы пишете my_obj1 + my_obj2, при этом перегрузив оператор +, принимающий в качестве аргументов объекты соответствующего класса, то компилятор подобный вызов заменит на operator+(my_obj1, my_obj2);
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru