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

Классы, комплексные числа и перегрузка оператора - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 5.00
Excluz1ve
0 / 0 / 0
Регистрация: 16.09.2012
Сообщений: 18
29.12.2012, 03:42     Классы, комплексные числа и перегрузка оператора #1
Составить описание класса для представления комплексных чисел. Обеспечить вы-
полнение операций сложения, вычитания и умножения комплексных чисел. Операции
организовать в виде перегруженных операторов. Написать программу, демонстри-
рующую работу с этим классом.

Имееться код, но выводит неясные ошибки.
Комплятор просит поменять воид на инт что мне не нужно.
в остриме выводит какието ошибки.

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <iostream>
#include <conio.h>
#include <math.h>
#include <stdio.h>
 
using namespace std;
 
class Komplex
 
    {
    private:
        double real;
        double image;
 
    public:
        Komplex() {};
        Komplex(double r)
         { real = r;
          image = 0; } // Конструктор
        Komplex(double r, double i,double a)
         { real = r,
          image = i; }   // Конструктор
        ~Komplex() {}   // Деструктор
        Komplex operator+(Komplex &);   // Перегрузка оператора сложения
        Komplex operator-(Komplex &);   // Перегрузка оператора вычитания
        Komplex operator*(Komplex &); // Перегрузка оператора умножения
        Komplex operator*(double &c); // Перегрузка оператора умножения на Cons
        double& operator[](int s);
        friend Komplex operator*(double &c , Komplex &);// Перегрузка оператора умножения Const на комплексное число
        friend ostream &operator<<(ostream &, Komplex &);
        friend istream &operator>>(istream &, Komplex &);
    };
Komplex Komplex::operator+(Komplex &fp1)
    {
        fp1.real = real + fp1.real;
        fp1.image = image + fp1.image;
        return fp1;
    }
Komplex Komplex::operator-(Komplex &fp1)
    {
 
        fp1.real = real - fp1.real;
        fp1.image = image - fp1.image;
        return fp1;
    }
Komplex Komplex::operator*(Komplex &fp1)
    {
        double i, j;
        i = real * fp1.real - image * fp1.image;
        j = real * fp1.image + fp1.real * image;
        fp1.real = i;
        fp1.image = j;
        return fp1;
    }
Komplex Komplex::operator*(double &c)
{
Komplex fp1;
double i, j;
i = real * c;
j = image * c;
fp1.real = i;
fp1.image = j;
return fp1;
}
Komplex operator*(double &c, Komplex &fp1)
{
Komplex fp2;
double i, j;
i = c * fp1.real;
j = c * fp1.image;
fp2.real = i;
fp2.image = j;
return fp2;
}
double &Komplex::operator[](int s)
{
    if(s==0) return real;
    if(s==1) return image;
}
 
ostream &operator<< (ostream &fo, Komplex &fp)
    {
        if (fp.image < 0) fo << fp.real << "+i(" << fp.image << ")\n";
        else fo << fp.real << "+i" << fp.image << "\n";
        return fo;
    }
istream &operator>>(istream &fi, Komplex &fp)
 {
        cout << "Введите реальную часть: ";
        fi >> fp.real;
        cout << "Введите мнимую часть: ";
        fi >> fp.image;
        return fi;
 }
 
void main()
{
    setlocale(LC_ALL, "Russian");
    Komplex k1, k2, k3;
    double s;
    double c;
    cin >> k1;
    cin >> k2;
    cout<<"Введите действительное число: ";
    cin >> s;
    k3=k2;
    cout << "Первое комплексное число = " << k1;
    cout << "Второе комплексное число = " << k2;
    cout << "Действительное число = " << s<<endl;
    cout << "k1 + k2 = " <<k1+k2;
    k2=k3;
    cout << "k1 - k2 = " <<k1-k2;
    k2=k3;
    cout << "k1 * k2 = " <<k1*k2;
    k2=k3;
    cout << "const * k1 = "<< k1*s;
    cout << "k1 * const = "<< s*k1;
    k1[0]=6;
    k1[1]=15;
    cout << "Новое комплексное число = " <<k1[0];
    cout<<"+i";
    cout<<k1[1];
system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2012, 03:42     Классы, комплексные числа и перегрузка оператора
Посмотрите здесь:

Комплексные числа/перегрузка C++
C++ классы.комплексные числа
C++ перегрузка операторов, комплексные числа C++
Классы и объекты (комплексные числа) C++
C++ Классы. Перегрузка операторов для комплексного числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
29.12.2012, 07:27     Классы, комплексные числа и перегрузка оператора #2
потому что по стандартам С++ функция main() возврашает int
C++
1
 cout << "k1 + k2 = " <<k1+k2;
там же в операторе перегрузке адрес нудно передать а не Объект
C++
1
cout << "k1 + k2 = " << &(k1+k2);
но результат почему то в 16 ричном виде

Добавлено через 6 минут
я где то ошибся но не пойму где
-=ЮрА=-
Заблокирован
Автор FAQ
29.12.2012, 12:20     Классы, комплексные числа и перегрузка оператора #3
Цитата Сообщение от Nixy Посмотреть сообщение
но результат почему то в 16 ричном виде
- да потому что ссылка
Цитата Сообщение от Nixy Посмотреть сообщение
cout << "k1 + k2 = " << &(k1+k2);
ты адрес выражения выводишь а не сумму

PS:Excluz1ve, посмотри сюда 2.4 Наш класс Комплексное число выше есть теория.
Самая основная ошибка у тебя - модернизация аргументов при сложении - кто даёт право в матоперации скажем сложения a + b вместо этого c = a + b делать это a += b и так во всём коде, не увидел также нужнейших функций преобразования комплекса в показательную и экспоненциальную форму записи - без этого решать сложные формулы с комплексами вообще невозможно...
Excluz1ve
0 / 0 / 0
Регистрация: 16.09.2012
Сообщений: 18
07.01.2013, 17:39  [ТС]     Классы, комплексные числа и перегрузка оператора #4
я вот только не пойму зачем что то преобразовывать, разве это обязательно?
-=ЮрА=-
Заблокирован
Автор FAQ
07.01.2013, 20:34     Классы, комплексные числа и перегрузка оператора #5
Цитата Сообщение от Excluz1ve Посмотреть сообщение
я вот только не пойму зачем что то преобразовывать, разве это обязательно?
Да нет совсем не обязательно если программа считает только 2 + 2, а вот скажем возведи в степень 1.258 комплексное число в алгебраической записи, потмом поймёшь зачем показательная форма записи.
Также убери из класса модернизацию операндов математических операций это некорректно с математической точки зрения!
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 54
12.10.2014, 22:13     Классы, комплексные числа и перегрузка оператора #6
Так как же правильно вывести сложение:
C++
1
cout << "k1 + k2 = " << &(k1+k2);
Добавлено через 24 минуты
Ребята, кто поможет???
8Observer8
 Аватар для 8Observer8
901 / 609 / 79
Регистрация: 05.10.2013
Сообщений: 2,300
Записей в блоге: 45
13.10.2014, 09:38     Классы, комплексные числа и перегрузка оператора #7
Несколько замечаний по коду:

1) У вас в конструкторе лишний параметр "a":
C++
1
2
3
4
5
Komplex(double r, double i,double a)
{
    real = r,
    image = i;
}
2) Все эти конструкторы:
C++
1
2
3
4
5
6
7
        Komplex() {};
        Komplex(double r)
         { real = r;
          image = 0; } // Конструктор
        Komplex(double r, double i,double a)
         { real = r,
          image = i; }   // Конструктор
Можно заменить одним:
C++
1
2
3
public:
    Komplex( double r, double i = 0 ) :
        real( r ), image( i ) {}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2014, 19:55     Классы, комплексные числа и перегрузка оператора
Еще ссылки по теме:

Перегрузка оператора, комплексные числа C++
Классы, комплексные числа, возможность записи comp(3+2.2i) C++
C++ Перегрузка оператора + для сложения матриц (С++, ООП, Классы, WinForms)

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

Или воспользуйтесь поиском по форуму:
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 54
13.10.2014, 19:55     Классы, комплексные числа и перегрузка оператора #8
На счет конструкторов - спасибо! Результат сложения я вывожу на экран так:
C++
1
2
3
4
5
6
7
Complex c1, c2, res;
  cin >> c1;
  cin >> c2;
  cout << "Первое комплексное число = " << c1;
  cout << "Второе комплексное число = " << c2;
  res = c1 + c2;
  cout << "c1 + c2 = " << res;
Yandex
Объявления
13.10.2014, 19:55     Классы, комплексные числа и перегрузка оператора
Ответ Создать тему
Опции темы

Текущее время: 06:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru