С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kobzon
0 / 0 / 0
Регистрация: 06.03.2013
Сообщений: 13
#1

Перегрузка оператора вывода - C++

24.11.2013, 12:53. Просмотров 413. Ответов 7
Метки нет (Все метки)

Доброго времени суток.
Задача программы: умножение и деление комплексных чисел.
Файл number.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
class number
{
public:
    double re,im,re1,im1;
public:
    number(void);
    number(double);
    ~number(void);
    number& operator*(number&);
    number& operator/(number&);
};
Файл number.cpp
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
30
31
32
33
34
35
36
#include "stdafx.h"
#include "iostream"
#include "number.h"
using namespace std;
 
number::number(void)
{
    cout<<"Введите действ. часть: ";
    cin>>re;
    cout<<"Введите мнимую часть: ";
    cin>>im;
}
 
number::number(double c)
{
    re=0;
    im=0;
}
 
number::~number(void)
{
}
 
number& number::operator*(number& p)
{
    re1=re*p.re-im*p.im;
    im1=im*p.re+re*p.im;
    return *this;
}
 
number& number::operator/(number& p)
{
    re1=(re*p.re+im*p.im)/(p.re*p.re+p.im*p.im);
    im1=(im*p.re-re*p.im)/(p.re*p.re+p.im*p.im);
    return *this;
}
Главный файл
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
30
31
32
33
34
35
36
37
38
39
#include "stdafx.h"
#include "iostream"
#include "number.h"
#include "conio.h"
using namespace std;
 
 
int menu()
{
    cout<<"1.Умножение"<<endl;
    cout<<"2.Деление"<<endl;
    cout<<"3.Выход"<<endl;
    int k;
    cin>>k;
    return k;
}
int main()
{
    setlocale(0,"rus");
    while(true)
    {
    switch (menu())
    {
    case 1: 
        {
            number a,b,c(0); c=a*b; cout<<c.re1<<"+i"<<c.im1<<endl; break;
        }
    case 2: 
        {
            number a,bc(0); c=a/b; cout<<c.re1<<"+i"<<c.im1<<endl; break;
        }
    case 3: return 0;
    default:
        break;
    }
    _getch(); system("cls");
    }
    return 0;
}
Программа работает, но я хочу ещё перегрузить операторы вывода, чтобы в строках 26 и 30 я просто написал cout<<c; и мне выводило комплексное число.
Может кто-нибудь помочь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2013, 12:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора вывода (C++):

Перегрузка оператора вывода в С++ (для вывода данных вектора) - C++
Как правильно перегрузить оператор вывода для вектора чтобы он выводил все данные из вектора ? Для этого класса есил можно помогите. ...

Перегрузка оператора вывода - C++
Доброго времени суток. Столкнулся с проблемой: функция перегрузки вывода возвращает некорректное значение. Код вызова перегрузки ...

Перегрузка оператора вывода - C++
struct SomeStruct { std::ostream&amp; operator&lt;&lt; (std::ostream&amp; s/*, SomeStruct&amp;*/) { return s &lt;&lt; &quot;123&quot;; }; }; int main() {...

Перегрузка оператора вывода - C++
Здравствуйте. Не могу понять в чем ошибка. При выводе пишет: warning C4717: operator&lt;&lt;: рекурсия на всех путях выполнения, функция вызовет...

Перегрузка оператора вывода - C++
Здравствуйте. Я пишу учебную программу реализующая арифметику обыкновенных дробей. И в данный момент перезагружаю оператор вывода. ...

Перегрузка оператора вывода - C++
Пытаюсь написать программку, но возникла ошибка с выводом информации на экран. Вот мой код: int MAX_ARRAY_SIZE = 2147483647; ...

7
Banddk
37 / 37 / 1
Регистрация: 08.12.2012
Сообщений: 157
Записей в блоге: 1
24.11.2013, 12:56 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ostream &operator<<(ostream &out, complex t)
{
    out<<t.x;
    if(t.y!=0)
        out<<"+i*("<<t.y<<")";
    
    return out;
}
 
istream &operator>>(istream &in, complex &t)
{
    cout<<"RealPart\n>";
    in >> t.x;
    cout<<"ImagePart\n>";
    in>>t.y;
    return in;
}
Вот делал для своего класса комплексных чисел.
0
kobzon
0 / 0 / 0
Регистрация: 06.03.2013
Сообщений: 13
24.11.2013, 13:27  [ТС] #3
Пробовал почти тоже самое, а именно: перегрузку объявлял как
C++
1
friend ostream& operator<<(ostream&,number&);
и в главном коде
C++
1
2
3
4
5
6
7
8
9
10
ostream& operator<<(ostream& s,number& p)
{
    if(p.im>0)
        s<<p.re<<"+i"<<p.im;
    if(p.im<0)
        s<<p.re<<"-i"<<(-1*p.im);
    if(p.im==0)
        s<<p.re;
    return s;
}
Но это не компилится, не знаю почему. Вот список ошибок:
0
Миниатюры
Перегрузка оператора вывода  
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2013, 13:33 #4
#include <iostream> делали в number.h? Покажите файл с перегрузкой.
0
kobzon
0 / 0 / 0
Регистрация: 06.03.2013
Сообщений: 13
24.11.2013, 13:40  [ТС] #5
number.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#pragma once
#include "iostream"
class number
{
public:
    double re,im,re1,im1;
public:
    number(void);
    number(double);
    ~number(void);
    number& operator*(number&);
    number& operator/(number&);
    friend ostream& operator<<(ostream&,number&);
};


number.cpp
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
#include "stdafx.h"
#include "iostream"
#include "number.h"
using namespace std;
 
number::number(void)
{
    cout<<"Введите действ. часть: ";
    cin>>re;
    cout<<"Введите мнимую часть: ";
    cin>>im;
}
 
number::number(double c)
{
    re=0;
    im=0;
}
 
number::~number(void)
{
}
 
number& number::operator*(number& p)
{
    re1=re*p.re-im*p.im;
    im1=im*p.re+re*p.im;
    return *this;
}
 
number& number::operator/(number& p)
{
    re1=(re*p.re+im*p.im)/(p.re*p.re+p.im*p.im);
    im1=(im*p.re-re*p.im)/(p.re*p.re+p.im*p.im);
    return *this;
}


Главный файл
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "stdafx.h"
#include "iostream"
#include "number.h"
#include "conio.h"
using namespace std;
 
ostream& operator<<(ostream& s,number& p)
{
    if(p.im>0)
        s<<p.re<<"+i"<<p.im;
    if(p.im<0)
        s<<p.re<<"-i"<<(-1*p.im);
    if(p.im==0)
        s<<p.re;
    return s;
}
 
 
int menu()
{
    cout<<"1.Умножение"<<endl;
    cout<<"2.Деление"<<endl;
    cout<<"3.Выход"<<endl;
    int k;
    cin>>k;
    return k;
}
int main()
{
    setlocale(0,"rus");
    while(true)
    {
    switch (menu())
    {
    case 1: 
        {
            number a,b,c(0); c=a*b; cout<<c; break;
        }
    case 2: 
        {
            number a,b,c(0); c=a/b; cout<<c; break;
        }
    case 3: return 0;
    default:
        break;
    }
    _getch(); system("cls");
    }
    return 0;
}
0
Banddk
37 / 37 / 1
Регистрация: 08.12.2012
Сообщений: 157
Записей в блоге: 1
24.11.2013, 13:48 #6
Я объявлял вне класса и без friend и все работает
1
kobzon
0 / 0 / 0
Регистрация: 06.03.2013
Сообщений: 13
24.11.2013, 13:54  [ТС] #7
Точно работает. Спасибо за помощь.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2013, 14:06 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once
#include <iostream>
 
class number
{
public:
    double re,im,re1,im1;
public:
    number(void);
    number(double);
    ~number(void);
    number& operator*(number&);
    number& operator/(number&);
    friend std::ostream& operator<<(std::ostream&,number&);
};
1
24.11.2013, 14:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2013, 14:06
Привет! Вот еще темы с ответами:

Перегрузка оператора вывода - C++
Допустим я перегружаю оператор вывода: std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os,Drobi const &amp;d) { ...

Перегрузка оператора вывода - C++
Здравствуйте! При вызове перегруженного оператора возникает ошибка. Подскажите, как её исправить. #include &quot;stdafx.h&quot; #include...

Перегрузка оператора вывода - C++
Я сотворил одну программку, при выводе первый элемент массива не правильный. Уже перегрузил оператор вывода, но не понимаю что не так....

Перегрузка оператора вывода - C++
Всем привет, может быть глупый вопрос, но по Липманну вообще ничего не понятно, хотя книга для начинающих. Так как я мало знаком с...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.