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

перегрузка умножения - C++

Восстановить пароль Регистрация
 
Floron
0 / 0 / 0
Регистрация: 12.10.2013
Сообщений: 12
29.05.2014, 14:24     перегрузка умножения #1
C++
1
2
3
4
5
6
7
8
9
10
MyComplex operator* (MyComplex x, MyComplex y)
{
 double Re1, Im1, Re2, Im2;
 x.ReAndIm(Re1, Im1);
 y.ReAndIm(Re2, Im2);
 Re1=Re1*Re2-Im1*Im2;
 Im1=Re1*Im2+Re2*Im1;
 x.modANDarg(Re1,Im1);
 return x;
}
вот функция перегрузки, если умножить константу на комплексное число, то все работает, где и как происходит преобразование константы в комплексное число
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
29.05.2014, 16:17     перегрузка умножения #2
Наверное в конструкторе класса MyComplex.
nmcf
4307 / 3728 / 1257
Регистрация: 14.04.2014
Сообщений: 14,608
29.05.2014, 16:22     перегрузка умножения #3
Ты не ту функцию показываешь. Она для умножения двух MyComplex.
Floron
0 / 0 / 0
Регистрация: 12.10.2013
Сообщений: 12
29.05.2014, 19:49  [ТС]     перегрузка умножения #4
C++ (Qt)
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
class MyComplex
{   
    double mod, arg;
 
    public:
    void ReAndIm(double& Re, double& Im)//Поиск действительной и мнимой части через модуль и аргумент
    {
        Re = mod*cos(arg);      //действительная часть
        Im = mod*sin(arg);      //мнимая часть
    }
 
    void modANDarg(double x, double y)//Поиск модуля и аргумента через действительную и мнимую часть
    {
        mod = sqrt(x*x+y*y);
        arg = tan(x/y);
    }
 
    MyComplex ()
    {
        mod=arg=0;
    }
    MyComplex (float a, float b) 
    { 
        mod = a, arg = b;
    }
    MyComplex (float a ) 
    {
        mod = a, arg = 0;
    }
    
    friend MyComplex cos1 (MyComplex z);
    friend ostream& operator<< (ostream& f, MyComplex& a);
    friend istream& operator>> (istream& f, MyComplex& a);
    friend MyComplex operator* (MyComplex x, MyComplex y);
    //friend MyComplex operator* (int x, MyComplex y);
    friend MyComplex operator+ (MyComplex x, MyComplex y);
};
 
 
istream& operator>> (istream& f, MyComplex& z)
{
    cout<<"Введите значение комплексного числа ";
    cout<<endl<<"Модуль: ";
    f>>z.mod;
    cout<<"Аргумент: ";
    f>>z.arg;
    return f;
}
 
ostream& operator<< (ostream& f, MyComplex& z)
{
    f<<"<"<<z.mod<<","<<z.arg<<">"<<endl;
    return f;
}
 
MyComplex cos1 (MyComplex z)
{
    double Re, Im;
    z.ReAndIm(Re,Im);
    Re=cos(Re)*cosh(Im);
    Im=-sin(Re)*sinh(Im);
    z.modANDarg(Re,Im);
    return z;
}
 
MyComplex operator* (MyComplex x, MyComplex y)
{
double Re1, Im1, Re2, Im2;
 x.ReAndIm(Re1, Im1);
 y.ReAndIm(Re2, Im2);
 Re1=Re1*Re2-Im1*Im2;
 Im1=Re1*Im2+Re2*Im1;
 x.modANDarg(Re1,Im1);
 return x;
}
 
/*MyComplex operator*(int x, MyComplex y)
{
double Re2, Im2;
 y.ReAndIm(Re2, Im2);
 Re2=x*Re2;
 Im2=x*Im2;
 y.modANDarg(Re2,Im2);
 return y;
}*/
 
MyComplex operator+ (MyComplex x, MyComplex y)
{
    double a, b, s, m;
    x.ReAndIm(a,b);
    y.ReAndIm(s,m);
    a=a+s;
    b=b+m;
    x.modANDarg(a,b);
    return x;
}
 
MyComplex schet_MyComplex(MyComplex& z)
{
    return z*z+cos1(2*z);
}
Yandex
Объявления
29.05.2014, 19:49     перегрузка умножения
Ответ Создать тему
Опции темы

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