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

Перегрузка оператора "<<" для вывода пользовательских классов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибки при работе с шаблонами http://www.cyberforum.ru/cpp-beginners/thread1231031.html
Всем привет. Пишу упрощенный List с использованием шаблонов. Но в итоге я получаю вот такие сообщения про ошибки. "class template has already been declared as a non-class template" - указывает на конец файла “multiple template parameter lists are not allowed" - указывает на template<class U> Подскажите пожалуйста где я допустил ошибку... #ifndef _EVENT_LIST_H_ #define _EVENT_LIST_H_
C++ Хранение информации о многомерном массиве При передаче в функцию многомерного массива требуется обязательно указывать все его соответсвующие размерности, кроме первой. Хранится где нибудь данная информция при выполнении программы или даннаю информацию нужна только на стадии компиляция для избежания ошибок? http://www.cyberforum.ru/cpp-beginners/thread1231018.html
Deadlock и racecondition проверить код C++
класс принимает функцию и количество потоков...и все время поддерживает одновременное выполнение 10 потоков этой функции...интересуют ошибки связанные с многопоточным программированием...может еще подскажите как лучше сделать?..) заголовочный файл class gthread { typedef void (*pFunc) (); public: gthread(pFunc func, unsigned short int, unsigned short int); ~gthread(); void start();
Каким образом реализуется квалификатор const? C++
Каким образом реализуется квалификатор const? Хранится ли в памяти в процессе выполнения программы какая либо информация по этому поводу(например что данные константны)?
C++ Автоматическое добавление dll в проект при сборке в CodeBlocks и Eclipse CDT http://www.cyberforum.ru/cpp-beginners/thread1230961.html
Хочу, чтобы при сборке необходимые библиотеки автоматически помещались в директорию с скомпилированным исполняемым файлом. Как это сделать в Code::Blocks и Eclipse CDT, если это вообще возможно?
C++ Сформировать массив содержащий количество денежных знаков на указанную сумму Заданы значения элементов двух целочисленных массивов и некоторое число. Первый массив содержит номиналы денежных знаков (по убыванию), а второй - их количество в касс. Сформировать массив содержащий количества денежных знаков необходимых для выдачи из кассы указанной суммы. Вывести этот массив или сообщение поясняющее причину невозможности выдачи указанной суммы. Размер массивов не более 10.... подробнее

Показать сообщение отдельно
dalay_lama
 Аватар для dalay_lama
65 / 65 / 7
Регистрация: 22.09.2012
Сообщений: 434
20.07.2014, 16:00     Перегрузка оператора "<<" для вывода пользовательских классов
Всем доброго времени суток. Пытаюсь сделать перегрузку оператора "<<" для того, чтобы можно было выводить объекты пользовательского класса таким образом:
C++
1
2
3
cout <<object_my_class;
//или так
cout <<object_my_class + object_my_class;
Что я для этого сделал:
переопределил оператор + для класса. Функция возвращает объект класса:
C++
1
2
3
4
5
6
7
//в .h
Complex operator+(Complex &complex);
//в .cpp
Complex Complex::operator+(Complex &complex)
{
    return Complex(real_ + complex.real_, imaginary_ + complex.imaginary_);
}
создал дружественную функцию, где первый аргумент - ссылка на объект класса ostream, второй - ссылка на объкт моего класса. Возвращаю ссылку на объект объект класса ostream для того, чтобы можно было "склеивать" << и <<
C++
1
2
3
4
5
6
7
8
//в .h
friend std::ostream& operator<<(std::ostream &os, Complex &complex);
//в .cpp
std::ostream& operator<<(std::ostream &os, Complex &complex)
{
    os <<"(" <<complex.real_ <<"," <<complex.imaginary_ <<"i)";
    return os;
}
при попытке вывести обычный объект в поток, всё ок, но запись вида:
C++
1
2
3
Complex a(3, 4);
Complex c(2, 1);
cout <<a+c;
порождает кучу ошибок
Код
candidate function not viable: no known conversion from 'Complex' to '__ostream_type &(*)(__ostream_type &)' for 1st argument
      operator<<(__ostream_type& (*__pf)(__ostream_type&))
      ^
candidate function not viable: no known conversion from 'Complex' to '__ios_type &(*)(__ios_type &)' for 1st argument
      operator<<(__ios_type& (*__pf)(__ios_type&))
      ^
и тд. и очень много
Итак, объясните пожалуйста тугодуму, что я делаю не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru