Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 10

Перегрузка оператора равно

11.10.2013, 09:13. Показов 4100. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как перегрузить оператор равно в с++ для комплексных чисел?

Вот объявленный класс:
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
class TComplex
{
private:
  double FRe;
  double FIm;
public:
  double Re(){return FRe;};
  double Im(){return FIm;};
  double Module();
  double Angle();
  TComplex(double Re, double Im);
  TComplex operator +=(TComplex Comlex);
  TComplex operator -=(TComplex Comlex);
  TComplex operator *=(TComplex Comlex);
  TComplex operator /=(TComplex Comlex);
  TComplex();
  TComplex(AnsiString Comlex);
  TComplex operator +(TComplex Comlex);
  TComplex operator -(TComplex Comlex);
  TComplex operator *(TComplex Comlex);
  TComplex operator /(TComplex Comlex);
  AnsiString ToStr();
 
 
};
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.10.2013, 09:13
Ответы с готовыми решениями:

Перегрузка оператора []
Задание: перегрузить оператор для возведения в степень дроби. void CDrib::operator(int x) { m_nChis = pow(m_nChis*1.0, x*1.0); ...

Перегрузка оператора сравнения ( no match for 'operator==' )
Приветствую! У меня было задание в институте реализовать класс "Вектор " с соответствующими перегрузками операторов. Все шло по маслу до...

Перегрузка оператора равно наоборот
Здравствуйте, уважаемые форумчане! Решил побаловаться с перегрузкой операторов, дошел до оператора равно. Перегрузил кажись как надо. ...

21
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
11.10.2013, 09:51
Не уверен... но вроде так:
C++
1
  TComplex & operator=(TComplex other);
Далее так:
C++
1
2
3
4
5
  TComplex & operator=(TComplex other)
  {
        this->swap(other); 
        return *this;
  }
1
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 10
11.10.2013, 10:04  [ТС]
Но мне нужен оператор == а не =
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
11.10.2013, 10:05
Цитата Сообщение от Franky_62 Посмотреть сообщение
Но мне нужен оператор == а не =
Надо было сказать сразу Вам нужен оператор присваивания или сравнения.
0
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 10
11.10.2013, 10:07  [ТС]
но мне нужен оператор равно(==) а не присвоить (==)

Добавлено через 1 минуту
вот что я надумал
C++
1
2
3
4
5
6
bool TComplex::operator ==(TComplex Complex)
{
    if(  FRe==Complex.FRe && FIm==Complex.FIm)
        return true;
    return false;
}
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
11.10.2013, 10:07
Цитата Сообщение от Franky_62 Посмотреть сообщение
но мне нужен оператор равно(==) а не присвоить (==)
А вот это я вообще не понял.
1
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 10
11.10.2013, 10:09  [ТС]
Теперь возникает проблема с выводом на форму

Добавлено через 1 минуту
Цитата Сообщение от Kulgar Посмотреть сообщение
А вот это я вообще не понял.
ну мне нужно сравнить значения 2-х комплексных чисел, вводимых в edit1 и edit2 и вывести результат истина или ложь в edit3
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
11.10.2013, 10:13
Цитата Сообщение от Franky_62 Посмотреть сообщение
ну мне нужно сравнить значения 2-х комплексных чисел, вводимых в edit1 и edit2 и вывести результат истина или ложь в edit3
Теперь понял.
На какую строчку и какая ошибка выводится?
0
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 10
11.10.2013, 10:23  [ТС]
Проблема в том, что у меня в программе уже есть методы с другим типом и при выводе возникает проблема что тип bool нельзя преобразовать к типу TComplex

Добавлено через 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
125
126
127
TComplex::TComplex(double Re, double Im)
{
  FRe = Re;
  FIm = Im;
}
 
TComplex TComplex::operator +=(TComplex Complex)
{
  FRe += Complex.FRe;
  FIm += Complex.FIm;
  return *this;
}
TComplex TComplex::operator -=(TComplex Complex)
{
  FRe += Complex.FRe;
  FIm -= Complex.FIm;
  return *this;
}
 
TComplex TComplex::operator *=(TComplex Complex)
{
    double NewRe;
    NewRe = (FRe*Complex.FRe - FIm*Complex.FIm);
    FIm = (FRe*Complex.FIm + FIm*Complex.FRe);
    FRe = NewRe;
    return *this;
}
 
TComplex TComplex::operator /=(TComplex Complex)
{
  if ((Complex.FRe == 0) || (Complex.FIm == 0))
    throw EZiroDivide("Деление на ноль");
  double NewRe;
  NewRe = (FRe*Complex.FRe + FIm*Complex.FIm)/
          (pow(Complex.FRe,2) + pow(Complex.FIm,2));
  FIm =   (FIm*Complex.FRe - FRe*Complex.FIm)/
          (pow(Complex.FRe,2) + pow(Complex.FIm,2));
  FRe = NewRe;
  return *this;
}
 
TComplex::TComplex()
{
  FRe = 0;
  FIm = 0;
}
 
TComplex TComplex::operator+(TComplex Complex)
{
  TComplex Result(FRe,FIm);
  Result+=Complex;
  return Result;
}
 
TComplex TComplex::operator/(TComplex Complex)
{
  TComplex Result(FRe,FIm);
  Result/=Complex;
  return Result;
}
 
TComplex TComplex::operator-(TComplex Complex)
{
  TComplex Result(FRe,FIm);
  Result-=Complex;
  return Result;
}
 
TComplex TComplex::operator*(TComplex Complex)
{
  TComplex Result(FRe,FIm);
  Result/=Complex;
  return Result;
}
 
bool TComplex::operator ==(TComplex Complex)
{
    if(  FRe==Complex.FRe && FIm==Complex.FIm)
        return true;
    return false;
}
 
TComplex::TComplex(AnsiString Complex)
{
  int Separator, Sign, Index;
  bool ImBool;
  Complex = Complex.Trim(); Separator = 0;
  Sign = 1; Index = Complex.Length(); ImBool = false;
  while ((Index != 0)&&(Separator == 0))
  {
    switch (Complex[Index]){
    case 'i':   ImBool = true;
    Complex[Index] = ' ';
    break;
    case '+':   Separator = Index;
    break;
    case '-':   Sign = -1;
    Separator = Index;
    }
    Index--;
  }
  if (ImBool)
  {
    if (Index == 0) FRe = 0;
    else FRe=Complex.SubString(1, Separator-1).ToDouble();
    if (Complex.SubString(Separator + 1, Complex.Length()
       - Separator).Trim() =="")
       FIm = Sign;
    else FIm = Sign*Complex.SubString(Separator + 1,
               Complex.Length() - Separator).ToDouble();
  }
  else
  {
    FRe = Complex.ToDouble();
    FIm = 0;
  }
}
 
AnsiString TComplex::ToStr()
{
  AnsiString Result;
  if (FIm > 0) Result = "+i" + FloatToStr(FIm);
  else if (FIm < 0) Result = "-i" + FloatToStr(-FIm);
  if (FRe != 0) Result = FloatToStr(FRe) + Result;
  else if (FIm = 0) Result = "0";
  return Result;
}
Добавлено через 8 минут
Цитата Сообщение от Kulgar Посмотреть сообщение
Теперь понял.
На какую строчку и какая ошибка выводится?
ошибка выводиться уже в другом модуле

в этом
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
TComplex a(Edit1->Text), b(Edit2->Text), c;
switch (RadioGroup1->ItemIndex) {
  case 0: c = a + b;  break;
  case 1: c = a - b;  break;
  case 2: c = a * b;    break;
  case 3: c = a / b;  break;
  case 4: c = a==b;}
Edit3->Text = c.ToStr();
вот такая ошмбка
[BCC32 Error] Unit1.cpp(26): E2034 Cannot convert 'bool' to 'TComplex'
Full parser context
Unit1.cpp(19): parsing: void _fastcall TForm1::RadioGroup1Click(TObject *)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
11.10.2013, 10:26
Цитата Сообщение от Franky_62 Посмотреть сообщение
при выводе возникает проблема
Посмотреть на этот "вывод" можно?

Кстати,
C++
1
else if (FIm = 0) Result = "0"; // Неужели тут компилятор не дал предупреждение ???
Добавлено через 2 минуты
Upd... Ясно. Можно тогда русским языком сказать, что написано для компилятора в случае, когда RadioGroup1->ItemIndex равно четырем? Надо что, сравнить два комплексных числа, или все-таки присвоить?
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
11.10.2013, 10:26
Цитата Сообщение от Franky_62 Посмотреть сообщение
case 4: c = a==b;}
Оу! Уважаемый! А как же так можно? Присваивать TComplex с результат логической операции сравнения?
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
11.10.2013, 10:35
Цитата Сообщение от Franky_62 Посмотреть сообщение
case 4: c = a==b;}
как тут присваивать bool комплексному числу?
0
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 10
11.10.2013, 10:40  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Посмотреть на этот "вывод" можно?

Кстати,
C++
1
else if (FIm = 0) Result = "0"; // Неужели тут компилятор не дал предупреждение ???
Добавлено через 2 минуты
Upd... Ясно. Можно тогда русским языком сказать, что написано для компилятора в случае, когда RadioGroup1->ItemIndex равно четырем? Надо что, сравнить два комплексных числа, или все-таки присвоить?
сравнить

Добавлено через 50 секунд
Цитата Сообщение от Kulgar Посмотреть сообщение
Оу! Уважаемый! А как же так можно? Присваивать TComplex с результат логической операции сравнения?
вот я и говорю, лажаю жутко чет((
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
11.10.2013, 10:42
Цитата Сообщение от Franky_62 Посмотреть сообщение
сравнить
Сравнил, что дальше? Результат сравнения - true. Как ты собрался его (это true) запихать в TComplex?
0
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 10
11.10.2013, 10:44  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Сравнил, что дальше? Результат сравнения - true. Как ты собрался его (это true) запихать в TComplex?
вот и мне очень интересно, я не пойму как это вывести на форму, пилить отдельные эдиты и кнопки?
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
11.10.2013, 10:44
Цитата Сообщение от gumi250 Посмотреть сообщение
как тут присваивать bool комплексному числу?
Операция сравнения на равенство 8я по преоритету. Операция присваивания 15я по преоритету.
Сначала выполняется сравнение и его результат присваивается экземпляру класса TComplex.
0
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 10
11.10.2013, 10:45  [ТС]
все, вроде сделал

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
TComplex a(Edit1->Text), b(Edit2->Text), c;
switch (RadioGroup1->ItemIndex) {
  case 0: c = a + b;  break;
  case 1: c = a - b;  break;
  case 2: c = a * b;    break;
  case 3: c = a / b; break;
  case 4:  if ((Edit1->Text)==(Edit2->Text))
    Edit3->Text="Числа равны";
  else
    Edit3->Text="Числа не равны";}
if ((RadioGroup1->ItemIndex) != 4)
Edit3->Text = c.ToStr();
}
только вот смысл метода я не понял, и без него прекрасно работает
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
11.10.2013, 10:53
Цитата Сообщение от Kulgar Посмотреть сообщение
Сначала выполняется сравнение и его результат присваивается экземпляру класса TComplex.
Издеваетесь? результат сравнения bool. Как из bool сделать комплексное число? Ответ никак, в этом и была ошибка о чем вы сами, чуток опередив меня и написали.

Franky_62, Вы полагаете препода устроет ваше решение?
Наверно как то так надо.
C++
1
2
3
4
  case 4:  if (a==b)
    Edit3->Text="Числа равны";
  else
    Edit3->Text="Числа не равны";}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
11.10.2013, 10:54
Цитата Сообщение от Franky_62 Посмотреть сообщение
только вот смысл метода я не понял, и без него прекрасно работает
Тебе привести код, который и без твоего класса работает? То, что ты не умеешь использовать даже то, что сам и написал - не значит, что оно не нужно:

C++
1
2
3
4
5
6
7
switch (RadioGroup1->ItemIndex) {
  case 0: c = a + b;  break;
  case 1: c = a - b;  break;
  case 2: c = a * b;    break;
  case 3: c = a / b; break;
  case 4: Edit3->Text = (a == b) ? "Числа равны" : "Числа не равны";
}
0
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 10
16.10.2013, 09:52  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Тебе привести код, который и без твоего класса работает? То, что ты не умеешь использовать даже то, что сам и написал - не значит, что оно не нужно:

C++
1
2
3
4
5
6
7
switch (RadioGroup1->ItemIndex) {
  case 0: c = a + b;  break;
  case 1: c = a - b;  break;
  case 2: c = a * b;    break;
  case 3: c = a / b; break;
  case 4: Edit3->Text = (a == b) ? "Числа равны" : "Числа не равны";
}
ну а как использовать метод? я чет не могу понять(((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2013, 09:52
Помогаю со студенческими работами здесь

Перегрузка оператора меньше или равно <=
Задача такая есть два объекта и нужно с помощью оператора перегрузки &lt;= сложить общие поля и разделить по ровну и записать изменения в два...

Перегрузка оператора равно для класса файла
Доброго времени суток. Помогите разобраться с перегрузкой. Идея в том, чтобы экземпляр класса создавал иллюзию работы с массивом. Т.е. ...

Классы (константный метод и перезагрузка оператора равно)
ПОМОГИТЕ ПОЖАЛУЙСТА, ЧТО НЕ ТАК???!!!! илл как тогда сделать правильно???? Очень очень надо(( Дано было задание: 1)Создать класс 2)...

Перегрузка оператора =
Доброго времени суток! Пишу библиотеку для работы со сколь угодно большими числами путём представления их в виде массива цифр. Для этих...

Перегрузка оператора ++
using System; namespace ConsoleApplication5 { class Pro {


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
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
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru