Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 22.06.2012
Сообщений: 36

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

22.06.2012, 15:18. Показов 2598. Ответов 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;
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.06.2012, 15:18
Ответы с готовыми решениями:

Объясните, пожалуйста, как добавляется метод в данном случае
Создаю статический класс и в нем объявляю статический метод: public static class SessionExtension { public static void...

Объясните, как в данном примере функционирует работа операторов
Всем доброго времени суток. У меня такoй вoпрос не могу понять как в данном примере функционирует работа split 2,FN$abc,4, и как происходят...

пожалуйста, перегрузка операторов
Реализовать класс String для работы со строками символов. Перегрузить операторы «=», «+=» так, чтобы производилось сложение строки и...

5
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
22.06.2012, 15:20
А ты понимаешь зачем нужна вообще перегрузка операторов?
0
165 / 164 / 23
Регистрация: 23.02.2011
Сообщений: 347
22.06.2012, 15:41
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);
вот в этих строчках у тебя вызываются не стандартные операторы, а объявленные выше
1
 Аватар для programm1r
48 / 47 / 7
Регистрация: 19.06.2012
Сообщений: 134
22.06.2012, 15:56
Если просто, то перегрузка состоит в том, чтобы использовать стандартные операторы по отношению к новым типам, объявленным тобой. В данном случае создается тип комплексного числа, и перегружаются операторы используемые с обычными числами (целые, вещественные), для работы с числами комплексными (операторы +,-,*,/). Все просто
1
0 / 0 / 0
Регистрация: 22.06.2012
Сообщений: 36
22.06.2012, 16:03  [ТС]
Спасибо большое,в целом всё понятно
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
22.06.2012, 17:34
Перегруженный оператор - по большому счёту эквивалентен методу, и представляет собой более удобную форму записи. Т.е. запись "c1 = c2 + c3" более удобна, чем "assign (c1, add (c2, c3))"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2012, 17:34
Помогаю со студенческими работами здесь

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

Добрые люди, скажите пожалуйста как выполняется перегрузка операторов
Помогите((( Я не понимаю, как нужно сделать перегрузку операторов * для умножения числа на вектор. Можете сказать для такого нуба как...

Чем является в Yii поведении NestedSetBehavior - lft и rgt, и как в данном случае обойтись без parent_id?
Раньше я работал на php и в иерархических вещах использовал такую структуру таблиц: ---------------- Товары например ...

Объясните подробно , пожалуйста , каким образом работает цикл for на данном примере
Значение переменной p, которое будет выведено в ячейку F1Book после выполнения фрагмента программы равно var i,j,t,p:integer; begin...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru