Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для Yashman
1 / 3 / 4
Регистрация: 02.07.2011
Сообщений: 90

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

20.09.2011, 20:20. Показов 1317. Ответов 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). Очень надеюсь на помощь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.09.2011, 20:20
Ответы с готовыми решениями:

Операции над комплексными числами
В данной программе нужно создать дружескую функцию класса Komplex. Таким образом чтобы читалась строка с5=2+с1. Как это правильно сделать??...

Операции над комплексными числами
Дано вот такое задание: Написать программу на языке C++, реализующую арифметику комплекс- ных чисел. Должны быть как минимум определены...

Реализовать арифметические операции с комплексными числами
Создайте структуру, описывающую комплексное число. Реализуйте арифметические операции с комплексными числами: сумму, разность, умножение,...

1
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
20.09.2011, 21:07
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+ можно было и не делать другом класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2011, 21:07
Помогаю со студенческими работами здесь

Операции с комплексными числами через ООП
Друзья, написал код программы. ошибку при компиляции выдает: fatal error LNK1169: обнаружен многократно определенный символ - один или...

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

Операции и функции в работе в классе с комплексными числами С++ Visual Studio
Помогите пожалуйста. Написала программу, но считает и умножает комплексные числа не правильно. Раньше умножало нормально, но теперь не знаю...

Операции с комплексными числами. Проконсультируйте. (аргумент, модуль, сложение, умножение, вычитание)
здравствуйте. Эта программа рабочая, работает для аргумента, сложения, вычитания, умножения, модуля комплексных чисел. Проверьте её...

На основе созданного класса для работы с тригонометрическими комплексными числами, перегрузить операции «*», «/» и «=» д
На основе созданного класса для работы с тригонометрическими комплексными числами, перегрузить операции «*», «/» и «=» для осуществления...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru