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

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

Войти
Регистрация
Восстановить пароль
 
Yashman
1 / 3 / 0
Регистрация: 02.07.2011
Сообщений: 90
#1

Операции с комплексными числами и перегрузка операторов << и >> - C++

20.09.2011, 20:20. Просмотров 536. Ответов 1
Метки нет (Все метки)

Здрасте! Пытаюсь решить задачу по написанию программы, которая производит действия с комплексными числами (если потребуется, объясню, что это за числа). В условии задачи просят произвести перегрузку операторов +, -, *, << и >>. Я в этом деле новичок, поэтому столкнулся с массой проблем. Вот мой программный код:
Заголовочный файл с классом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// файл attach.h
class complex
{
private:
    double real;
    double imagine;
public:
    complex (double r, double i);
    complex ();
    friend complex operator+ (const complex &x, const complex &y);
    friend complex operator- (const complex &x, const complex &y);
    friend complex operator* (const complex &x, const complex &y);
    friend complex operator* (double n, const complex &x);
    friend complex operator~ (const complex &x);
    friend std::ostream & operator<< (std::ostream & os, const complex & x);
    friend std::istream & operator>> (std::istream & os, const complex & x);
}
Файл с определениями методов класса:
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
51
52
// файл file1.cpp
#include "attach.h"
#include <iostream>
using namespace std;
 
complex :: complex (double r, double i)
{
    real = r;
    imagine = i;
}
 
complex :: complex()
{
    real = imagine = 0.0;
}
 
complex operator+ (const complex &x, const complex &y)
{
        return complex (x.real + y.real, x.imagine + y.imagine);
}
 
complex operator- (const complex &x, const complex &y)
{
        return complex (x.real - y.real, x.imagine - y.imagine);
}
 
complex operator* (const complex &x, const complex &y)
{
        return complex (x.real * y.real - x.imagine * y.imagine, x.real * y.real + x.imagine * y.imagine);
}
 
complex operator* (double n, const complex &x)
{
    return complex (n * x.real, n * x.imagine);
}
 
complex operator~ (const complex &x)
{
    return complex (x.real, -x.imagine);
}
 
ostream & operator<< (ostream &os, const complex &x)
{
    os << x.real << ", " << x.imagine << "i";
    return os;
}
 
istream & operator>>(istream &is, const complex &x)
{
    is >> x.real >> x.imagine;
    return is;
}
Главный файл
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
// файл main.cpp
#include <iostream>
#include "attach.h"
using namespace std;
int main()
{
    complex a(3.0, 4.0);
    complex c;
    cout << "Enter a complex number (q to quit):\n";
    while (cin >> c)
    {
        cout << "real: ";
        double r;
        cin >> r;
        cout << "imaginary: ";
        double i;
        cin >> i;
        cout << "c is " << c << '\n';
        cout << "complex conjugate is " << ~c << '\n';
        cout << "a is " << a << '\n';
        cout << "a + c is " << a + c << '\n';
        cout << "a - c is " << a - c << '\n';
        cout << "a * c is " << a * c << '\n';
        cout << "2 * c is " << 2 * c << '\n';
        cout << "Enter a complex number (q to quit):\n";
    }
    cout << "Done!\n";
    return 0;
}
Думаю, опытный программист сразу подскажет, что плохо, но, если нужно, могу выложить ответ компилятора на мой код (ошибок там около 25). Очень надеюсь на помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2011, 20:20     Операции с комплексными числами и перегрузка операторов << и >>
Посмотрите здесь:
Операции над комплексными числами C++
C++ Операции над комплексными числами
Операции над комплексными числами с использованием перегруженных операций C++
C++ Операции и функции в работе в классе с комплексными числами С++ Visual Studio
C++ Операции с комплексными числами. Проконсультируйте. (аргумент, модуль, сложение, умножение, вычитание)
C++ Структуры: арифметические операции (сложение, вычитание, умножение, деление) над комплексными числами
Вычисления с комплексными числами C++
Функция с комплексными числами C++
C++ Калькулятор с комплексными числами
Работа с комплексными числами C++
Действия с комплексными числами C++
Многочлен с комплексными числами C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
20.09.2011, 21:07     Операции с комплексными числами и перегрузка операторов << и >> #2
Yashman, вот так происходит перегрузка операторов:

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
 
using namespace std;
 
class CDummy
{
private:
    int a, b;
 
public:
    CDummy( int _a = 0, int _b = 0 ) : a(_a), b(_b) {};
    CDummy( const CDummy &d ) : a(d.a), b(d.b) {};
 
    CDummy & operator+=( const CDummy &d )
    {
        a += d.a;
        b += d.b;
        return *this;
    }
    
    //ему не обязательно быть другом класса
    //friend CDummy operator+( const CDummy &d1, const CDummy &d2 );
 
    friend ostream & operator<<( ostream &os, const CDummy &d );
    friend istream & operator>>( istream &is, CDummy &d );
};
 
//-------------------------------------------------------------------------
 
CDummy operator+( const CDummy &d1, const CDummy &d2 )
{
    CDummy ret = d1;
    ret += d2; // использует встроенный operator+=
    return ret;
}
 
ostream & operator<<( ostream &os, const CDummy &d )
{
    os << d.a << "; " << d.b;
    return os;
}
 
// формат: a; b
istream & operator>>( istream &is, CDummy &d )
{
    int a;
 
    is >> a;
 
    char ch;
    cin >> ch;
 
    if( ch != ';' )
    {
        is.setstate( ios::failbit );
        return is;
    }
 
    cin >> d.b;
    d.a = a;
 
    return is;
}
 
//-------------------------------------------------------------------------
 
int main()
{
    CDummy dummy1( 5, 6 );
    CDummy dummy2( 12, 2 );
 
    cout << "1: " << dummy1 << "\n2: " << dummy2 << '\n';
 
    CDummy dummy3 = dummy1 + dummy2;
 
    cout << "3: " << dummy3 << '\n';
 
    cout << "3> ";
 
    cin >> dummy3;
 
    cout << "3: " << dummy3 << "\n2: " << dummy2 << "\n3+2: " << dummy3 + dummy2 << '\n';
 
    return 0;
}
Если будут вопросы - спрашивайте.

Добавлено через 5 минут
Ошибся, operator+ можно было и не делать другом класса.
Ответ Создать тему
Опции темы

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