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

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

Войти
Регистрация
Восстановить пароль
 
Ковальски
0 / 0 / 0
Регистрация: 22.06.2012
Сообщений: 36
#1

Пожалуйста объясните в чем состоит перегрузка операторов данном случае? - C++

22.06.2012, 15:18. Просмотров 733. Ответов 5
Метки нет (Все метки)

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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// Complex.cpp: главный файл проекта.
 
#include "stdafx.h"
#include <iostream>
#include <cmath>
 
using namespace std;
 
class Complex
{
  private:
    double real;    // Действительная часть
        double image;   // Мнимая часть
    public:
        Complex() {};   // Конструктор по умолчанию
        Complex(double r) { real = r; image = 0; } // Конструктор
        Complex(double r, double i) { real = r, image = i; }    // Конструктор
        ~Complex() {}   // Деструктор
        double abs()   // Модуль комплексного числа
        {
            return sqrt(pow(real, 2.0) - pow(image, 2.0));
        }
 
        Complex operator+(Complex &);   // Перегрузка оператора сложения
        Complex operator-(Complex &);   // Перегрузка оператора вычитания
        Complex operator*(Complex &);   // Перегрузка оператора умножения
        Complex operator/(Complex &);   // Перегрузка оператора деления
    bool operator == (Complex & val)
    {
      if ((this->real == val.real) && (this->image == val.image))
      {
        return true;
      }
      else
      {
        return false;
      }
    }
    bool operator != (Complex & val)
    {
      if ((this->real == val.real) && (this->image == val.image))
      {
        return false;
      }
      else
      {
        return true;
      }
    }
 
        // Перегрузка функции-оператора << для вывода класса Complex
        friend ostream &operator<<(ostream &, Complex &);
 
        // Перегрузка функции-оператора >> для ввода класса Complex
        friend istream &operator>>(istream &, Complex &);
    };
 
// Перегрузка +
Complex Complex::operator+(Complex &fp1)
    {
    fp1.real = real + fp1.real;
    fp1.image = image + fp1.image;
    return fp1;
    }
 
// Перегрузка -
Complex Complex::operator-(Complex &fp1)
    {
    fp1.real = real - fp1.real;
    fp1.image = image - fp1.image;
    return fp1;
    }
 
// Перегрузка *
Complex Complex::operator*(Complex &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;
    }
 
// Перегрузка /
Complex Complex::operator/(Complex &fp1)
    {
    double k, i, j;
    k = fp1.real * fp1.real + fp1.image * fp1.image;
    i = (real * fp1.real + image * fp1.image) / k;
    j = (fp1.real * image - real * fp1.image) / k;
    fp1.real = i;
    fp1.image = j;
    return fp1;
    }
 
// Перегрузка оператора <<
ostream &operator<< (ostream &fo, Complex &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, Complex &fp)
    {
    cout << "Введите действительную часть: ";
    fi >> fp.real;
    cout << "Введите мнимую часть: ";
    fi >> fp.image;
    return fi;
    }
 
int main()
{
    setlocale(LC_ALL,"russian");
 
    // Комплексные числа
    Complex c1, c2;
 
    // Ввод комплексных чисел
    cin >> c1;
    cin >> c2;
 
    // Вывод комплексных чисел
    cout << "\nc1 = " << c1;
    cout << "c2 = " << c2;
    if (c1 == c2) 
    {
      cout << "c1 = c2\r\n";
    }
    if (c1 != c2)
    {
      cout << "c1 != c2\r\n";
    }
    cout << "Модуль c1: " << c1.abs() << "\n\n";
 
    // Вывод результатов операций
    cout << "c1 + c2 = " << (c1 + c2);
    cout << "c1 - c2 = " << (c1 - c2);
    cout << "c1 * c2 = " << (c1 * c2);
    cout << "c1 / c2 = " << (c1 / c2);
 
  getchar();
  getchar();
  getchar();
 
  return 0;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2012, 15:18     Пожалуйста объясните в чем состоит перегрузка операторов данном случае?
Посмотрите здесь:

Почему в данном случае работа с заранее выделенной памятью медленнее чем с динамической? - C++
Написал функцию которая на основе списка выделяет память и при каждом вызове возвращает указатель на следующий элемент для объекта. Код...

Объясните пожалуйста в чем заключается задание - C++
Вот задание: Добавьте в состав класса виртуальную функцию просмотра текущего объекта print (), а в производный класс Dancer_l -...

Объясните пожалуйста, в чем здесь дело(структура и указатель) - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;windows.h&gt; using namespace std; struct pizza { double diameter; ...

Что означает %k в данном случае? - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void main() { int i,j,k; cout&lt;&lt;&quot;razmer massiva:&quot;&lt;&lt;endl; cin&gt;&gt;k; ...

Что в данном случае означает friend? - C++
Всем доброй ночи! Помню, кода-то очень давно мельком видел, что кто-то уже спрашивал аналогичный вопрос, но тогда не придал этому...

Для чего выполняется присваивание в данном случае? - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; int main() { long n, k1=1, k2=1; double dbln, term, sum=0; ...

Как работают вложенные структуры? Что это означает в данном случае? - C++
Вот, собственно, часть кода: ... //--type for string--// struct str { char A; int lenght; };

перегрузка операторов - C++
Встала проблема с перегрузкой операторов. Обычные типа --, или += я вроде как написать смог, но встали ошибки с перегрузкой операторов &lt;&lt; и...

Перегрузка операторов ++ - C++
доброго времени суток. есть утечка памяти как я понимаю, но не мойму почему. о чем программа: есть обьект типа MString. В этом классе...

[C++] Перегрузка операторов - C++
Помогите пожалуйста перегрузить операторы в матрице: +=, i++, != и Перегрузил *= но не уверен, что так надо =\ Буду очень...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
22.06.2012, 15:20     Пожалуйста объясните в чем состоит перегрузка операторов данном случае? #2
А ты понимаешь зачем нужна вообще перегрузка операторов?
Algiz
160 / 160 / 13
Регистрация: 23.02.2011
Сообщений: 347
22.06.2012, 15:41     Пожалуйста объясните в чем состоит перегрузка операторов данном случае? #3
C++
1
2
3
4
cout << "c1 + c2 = " << (c1 + c2);
    cout << "c1 - c2 = " << (c1 - c2);
    cout << "c1 * c2 = " << (c1 * c2);
    cout << "c1 / c2 = " << (c1 / c2);
вот в этих строчках у тебя вызываются не стандартные операторы, а объявленные выше
programm1r
46 / 45 / 1
Регистрация: 19.06.2012
Сообщений: 134
22.06.2012, 15:56     Пожалуйста объясните в чем состоит перегрузка операторов данном случае? #4
Если просто, то перегрузка состоит в том, чтобы использовать стандартные операторы по отношению к новым типам, объявленным тобой. В данном случае создается тип комплексного числа, и перегружаются операторы используемые с обычными числами (целые, вещественные), для работы с числами комплексными (операторы +,-,*,/). Все просто
Ковальски
0 / 0 / 0
Регистрация: 22.06.2012
Сообщений: 36
22.06.2012, 16:03  [ТС]     Пожалуйста объясните в чем состоит перегрузка операторов данном случае? #5
Спасибо большое,в целом всё понятно
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
22.06.2012, 17:34     Пожалуйста объясните в чем состоит перегрузка операторов данном случае? #6
Перегруженный оператор - по большому счёту эквивалентен методу, и представляет собой более удобную форму записи. Т.е. запись "c1 = c2 + c3" более удобна, чем "assign (c1, add (c2, c3))"
Yandex
Объявления
22.06.2012, 17:34     Пожалуйста объясните в чем состоит перегрузка операторов данном случае?
Ответ Создать тему
Опции темы

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