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

Перегрузка operator<< - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Открытие и Закрытие дисковода. http://www.cyberforum.ru/cpp-beginners/thread244074.html
Вот такой у меня код #pragma comment(lib,"winmm.lib") #include <iostream> #include <mmsystem.h> using namespace std; int main () { mciSendString("Set cdaudio door open wait", NULL, 0, NULL); mciSendString("Set cdaudio door closed wait", NULL, 0, NULL); }
C++ Найти максимальный четный элемент массива Здравствуйте! Если вам не сложно - напишите пожалуйста программу для нахождения максимального четного элемента массива на Си. http://www.cyberforum.ru/cpp-beginners/thread244068.html
освоение основ C++
я учусь на инженера программного обеспечения на втором курсе. Нам дают всего по чу-чуть, возникла нужда в самообразовании. Как я выяснил для себя, я плохо знаю основы и самому трудно написать программу. Решил самостоятельно пройтись по следующим темам условия, циклы, массивы, указатели, функции, алгоритмы сортировки и поиска, структуры данных. По выполнять упражнения с книги, пописать по больше....
MessageBox выводит китайские(японские) иероглифы C++
DWORD dwRead = 0; DWORD buf_size = 4096; DWORD dwSize = GetFileSize(hFile, NULL); char* pBuffer=(char*)VirtualAlloc(NULL,buf_size,MEM_COMMIT,PAGE_READWRITE); ReadFile(hFile, pBuffer, dwSize, &dwRead, NULL); CString ptr2 = reinterpret_cast<LPCWSTR>(pBuffer); MessageBox(ptr2)
C++ МАТРИЦА РАССТОЯНИЙ ГРАФА http://www.cyberforum.ru/cpp-beginners/thread244052.html
Доброго времени суток! Помогите пожалуйста! Пытаюсь написать программу, которая находила бы матрицу расстояний по матрице смежности. Обыскала всевозможные источники информации. Нашла алгоритм нахождения матрицы расстояний с помощью алгоритма Флойда. Но программа находит матрицу расстояний не для всех графов, а если быть точной, для ограниченного числа неориентированных графов. Для орграфов не...
C++ Вывести середину строк (между кавычками) в файл Есть файл. Из него читаю по строкам if (strstr( s, " Как можно из каждой найденной такой строки вытянуть текст, находящийся между кавычками? Из строчки нужно выдернуть текст между кавычек 8/8/8/8/1Q6/1K6/8/2Nk4 w - - 0 1 и сохранить в файл с символом окончания строки. В итоге должен получится текстовый файл с несколькими такими строками. Как лучше реализовать? Создать массив, потом его... подробнее

Показать сообщение отдельно
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
20.02.2011, 00:11     Перегрузка operator<<
Selendis, вы, похоже, не совсем понимаете суть перегрузки. Перегрузить оператор, который уже где-то перегружен, не получится. Везде, где оператор << не перегружен, он будет делать то, что должен делать согласно функциональности, определяемой ядром языка - сдвигать свой левый операнд на столько позиций влево, сколько указано во втором операнде. Вы либо используете его AsIs, либо перегружаете, давая ему новый функционал. То, что он уже где-то перегружен как оператор, отвечающий за вставку данных в поток, нам фиолетово. Мы, как и разработчики стандартного класса работы с потоками, просто перегружаем этот оператор языка так, чтобы он выполнял заданный функционал. По сути таким же образом, каким мы определяем оператор << для своего класса, передавая ему в качестве левого операнда экземпляр класса std::ostream, мы можем определить практически любой бинарный оператор, и радоваться, только потом, когда кто-то будет нашим классом пользоваться, нас проклянёт за такие выкрутасы.

Добавлено через 4 минуты
Вот пример того, как делать можно, но не нужно, чтобы вы убедились, что то, что оператор << называют оператором вывода в поток, определили разработчики стандартных классов работы с потоками. Определи они для этой цели другой оператор, кто знает, может данный код был бы вполне уместен)))

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
 
class Foo
{
public:
    Foo(int a = 0):
    _a(a)
    {
    }
 
    friend std::ostream &operator+(std::ostream &, const Foo &);
 
private:
    int _a;
};
 
std::ostream &operator+(std::ostream &output, const Foo &rhs)
{
    return output << rhs._a;
}
 
int main()
{
    Foo f1(1), f2(2), f3(3);
 
    std::cout + f1 + f2 + f3 << std::endl;
 
    return 0;
}
 
Текущее время: 12:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru