Перегрузка оператора вывода в поток c
Автор Павел Жданенко задал вопрос в разделе Другие языки и технологии
Перегрузка операторов вводавывода С++ и получил лучший ответ
Ответ от Капитан Гугл[гуру]
1,3) потому что оператор использует поля private класса some_class2) чтобы можно было делать cout << a << b; чтобы не создавалась копия объекта stream.А в целом friend - это костыль, который следует использовать либо для скорости, либо для объединения ОО и не-ОО кодов. Если в классе определены публичные inline геттеры для полей a,b,c, то правильнее делать не friend, а использовать именно геттеры.
Ответ от Илья Павлов[гуру]
1)Функция ввода и функция вывода не могут быть членами класса, потому что если функция operator является членом класса, её левый операнд (передаваемый неявно посредством указателя this) должен быть членом этого класса, который вызывает эту функцию. (дословно цитирую Г. Шилдта)2)возвращаем ссылку на поток (ostream/istream), для сцепленного вызова. То есть это даёт нам возможность использовать оператор ввода/вывода несколько раз. Это как cout. cout<<a<<b<<c<<endl;Мы 4 раза использовали операцию "поместить в поток"(<<) - это и есть сцепленный вызов.3)потому что это следует из определения дружественной функции=) Можно рассмотреть ситуацию на интуитивном уровне: "в функцию вывода передаём объект, который нужно вывести".
1)Функция ввода и функция вывода не могут быть членами класса, потому что если функция operator является членом класса, её левый операнд (передаваемый неявно посредством указателя this) должен быть членом этого класса, который вызывает эту функцию. (дословно цитирую Г. Шилдта)2)возвращаем ссылку на поток (ostream/istream), для сцепленного вызова. То есть это даёт нам возможность использовать оператор ввода/вывода несколько раз. Это как cout. cout<<a<<b<<c<<endl;Мы 4 раза использовали операцию "поместить в поток"(<<) - это и есть сцепленный вызов.3)потому что это следует из определения дружественной функции=) Можно рассмотреть ситуацию на интуитивном уровне: "в функцию вывода передаём объект, который нужно вывести".
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Перегрузка операторов вводавывода С++