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

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

Восстановить пароль Регистрация
 
Ковальски
0 / 0 / 0
Регистрация: 22.06.2012
Сообщений: 36
22.06.2012, 15:18     Пожалуйста объясните в чем состоит перегрузка операторов данном случае? #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
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++
C++ Перегрузка операторов С++
C++ Что в данном случае означает friend?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
22.06.2012, 15:20     Пожалуйста объясните в чем состоит перегрузка операторов данном случае? #2
А ты понимаешь зачем нужна вообще перегрузка операторов?
Algiz
159 / 159 / 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
 Аватар для 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
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,136
Записей в блоге: 26
22.06.2012, 17:34     Пожалуйста объясните в чем состоит перегрузка операторов данном случае? #6
Перегруженный оператор - по большому счёту эквивалентен методу, и представляет собой более удобную форму записи. Т.е. запись "c1 = c2 + c3" более удобна, чем "assign (c1, add (c2, c3))"
Yandex
Объявления
22.06.2012, 17:34     Пожалуйста объясните в чем состоит перегрузка операторов данном случае?
Ответ Создать тему
Опции темы

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