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

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

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

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

22.06.2012, 15:18. Просмотров 745. Ответов 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++
Написал функцию которая на основе списка выделяет память и при каждом вызове возвращает указатель на следующий элемент для объекта. Код...

Объясните пожалуйста в чем заключается задание - 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; ...

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

Что означает %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++
Всем доброй ночи! Помню, кода-то очень давно мельком видел, что кто-то уже спрашивал аналогичный вопрос, но тогда не придал этому...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
17625 / 5849 / 376
Регистрация: 30.03.2009
Сообщений: 16,132
Записей в блоге: 26
22.06.2012, 17:34 #6
Перегруженный оператор - по большому счёту эквивалентен методу, и представляет собой более удобную форму записи. Т.е. запись "c1 = c2 + c3" более удобна, чем "assign (c1, add (c2, c3))"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2012, 17:34
Привет! Вот еще темы с ответами:

Для чего выполняется присваивание в данном случае? - 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++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;map&gt; #include &lt;vector&gt; #include &lt;string&gt; using namespace std; typedef...

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

Перегрузка операторов - C++
Как правильно перегружать подобные операторы #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; using namespace std; class Point{ public: ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.06.2012, 17:34
Ответ Создать тему
Опции темы

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