Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для Drodoz
33 / 21 / 13
Регистрация: 31.10.2018
Сообщений: 51

Проблема с перегрузкой оператора +

09.11.2018, 20:15. Показов 622. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Я создаю класс комплексных чисел, пытаюсь перегрузить операторы сложения и вычитания. Вот определение класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Complex
{
private:
    double re, im;
    
public:
    Complex() {}
 
    Complex(double real, double imaginary)
        : re(real), im(imaginary) {}
        
    friend Complex operator+(const Complex&, const Complex&);
    friend Complex operator-(const Complex&, const Complex&);
    
    friend std::ostream& operator<<(std::ostream&, Complex&);
    friend std::istream& operator>>(std::istream&, Complex&);
};
Операторы перегружены вот так:
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
std::ostream& operator<<(std::ostream& os, Complex& cpl)
{
    if (cpl.im < 0)
        os << cpl.re << '-' << cpl.im << 'i';
    else
        os << cpl.re << '+' << cpl.im << 'i';
    return os;
}
 
std::istream& operator>>(std::istream& is, Complex& cpl)
{
    is >> cpl.re >> cpl.im;
        return is;
}
 
Complex operator+(const Complex& c1, const Complex& c2)
{
    return Complex(c1.re + c2.re, c1.im + c2.im);
}
 
Complex operator-(const Complex& c1, const Complex& c2)
{
    return Complex(c1.re - c2.re, c1.im - c2.im);
}
Проблема заключается в выводе. Если написать вот так, то все прекрасно работает:
C++
1
2
3
4
Complex c1(2, 3);
Complex c2(3, 2);
Complex c3 = c1 + c2;
std::cout << c; // Вывод: 5+5i
Но если написать вот так, то возникает огромное количество ошибок во время компиляции (компилятор g++):
C++
1
2
3
Complex c1(2, 3);
Complex c2(3, 2);
std::cout << c1 + c2; // Ошибка
Почему так происходит? По сути оператор сложения возвращает новый объект Complex и этот объект должен корректно выводиться, т.к. операторы перегружены.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.11.2018, 20:15
Ответы с готовыми решениями:

Подправить код с перегрузкой оператора
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;string&gt; #include &lt;iterator&gt; using namespace std; ...

Создать тип данных для хранения строки символов. С перегрузкой оператора
Полностью задание: &quot;Создать тип данных для хранения строки символов. Перегрузить оператор унарный «-» для изменения порядка символов в...

Посмотрите, где ошибка с перегрузкой оператора и friend функцией для класса
Приветствую. :rose:Спасибо заранее, что обратили внимание на эту тему.:thank_you: Работаю в VS 2017. Есть head файл и 2 cpp, сейчас...

4
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.11.2018, 20:20
C++
1
std::ostream& operator<<(std::ostream& os, const Complex& cpl)
0
 Аватар для Drodoz
33 / 21 / 13
Регистрация: 31.10.2018
Сообщений: 51
09.11.2018, 20:29  [ТС]
Все равно не работает. Последнее сообщение об ошибке:
Code
1
2
3
main.cpp:32:15: note:   mismatched types 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>' and 'const double'
     is >> cpl.re >> cpl.im;
               ^~
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.11.2018, 22:24
Ты в правильном месте исправил? Показывай.
0
 Аватар для Drodoz
33 / 21 / 13
Регистрация: 31.10.2018
Сообщений: 51
10.11.2018, 19:17  [ТС]
Да, в классе и в самом определении
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.11.2018, 19:17
Помогаю со студенческими работами здесь

Проблема с абстрактными классами и перегрузкой операторов
добрый день. в общем ситуация такая: есть несколько классов, наследуемых от абстрактного класса. Нужно реализовать чтобы можно было...

Проблема с перегрузкой через дружественную функцию
Компилятор ругается на: turn&amp; operator -- ( turn &amp; с) { c.person = (c.person &gt;= 0 ? c.person-- : 0); return с; } ...

Проблема с перегрузкой операторов '-' >> << и с конструктором без параметров
Помогите пожалуйста, проблема с перегрузкой операторов '-' &gt;&gt; &lt;&lt;, возможно еще с конструктором без параметров наверно проблема #pragma...

Как исправить ошибку "идентификатор не определён"? (ошибка с перегрузкой оператора>> )
Здравствуйте. Пытаюсь вывести небольшой список: #include &lt;iostream&gt; #pragma once using namespace std; class BoolVector { ...

Проблема с перегрузкой операторов "+" и "+=" для классов Point и Circle
Есть класс Point (элементы данных x,y) и класс Circle (элементы данных р(типа Point),r). Их заголовочные файлы: class Point { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru