Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
86 / 60 / 12
Регистрация: 06.06.2013
Сообщений: 216

Перегрузить операторы operator+() и operator*() в пользовательском классе "Комплексное число"

20.01.2016, 00:30. Показов 2586. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Предлагаю заняться арифметикой.

Создал прослейший класс, перегрузил операторы сложения и умножения, в конструкторе произвожу вычисления. Строка 12 и 14 работают, а строка 13 выдает ошибку:
no match for 'operator+' in 'x + x.complex::operator*((* & z))'
Почему?

C++
1
2
3
4
5
6
7
8
9
10
class complex
{
public:
    complex();
 
    double re, im;
 
    complex operator+ (complex& z2);
    complex operator* (complex& z2);
};
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
#include "complex.h"
 
complex::complex()
{
    complex z, x;
 
    z.re = 1;
    z.im = 2;
    x.re = 1;
    x.im = 2;
 
    z = x+x;
    z = x+x*x;
    z = x*x+x;
}
 
complex complex::operator+ (complex& z2)
{
    complex z1;
    z1.re = z1.re + z2.re;
    z1.im = z1.im + z2.im;
    return z1;
}
complex complex::operator* (complex& z2)
{
    complex z1;
    z1.re = (z1.re * z2.re) - (z1.im * z2.im);
    z1.im = (z1.re * z2.im) + (z1.im * z2.re);
    return z1;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.01.2016, 00:30
Ответы с готовыми решениями:

Перегрузка оператора operator+() в пользовательском классе (сложение строк)
Хотел научить класс складывать строки, но на моменте освобождения памяти temp происходит ошибка. Поля класса: char* Str, int length...

Перегрузка operator>> и operator<< в абстрактном классе
Здрасьте! Есть необходимость перегрузить потоки, Я знаю как это сделать через friend, но вот кажется что есть и другое решение. Попытался...

Для класса "Комплексное число" перегрузить операторы
Реализация класса для комплексного числа Для класса &quot;Комплексное число&quot; перегрузите операторы C1=C2 += (С1+= С2) &lt; (С1&lt; С2)​ ...

25
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
20.01.2016, 20:02
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Anvis Посмотреть сообщение
Ведь в примерах из книг по этой теме действительно возвращаются ссылки,
название книги и страница - а лучше сразу ссылка -) Вычислим гавнокодеров)
0
86 / 60 / 12
Регистрация: 06.06.2013
Сообщений: 216
20.01.2016, 20:23  [ТС]
Без проблем Т.А. Павловская, "С/С++ Программирование на языке высокого уровня", стр. 190. Завтра будет возможность глянуть, что предлагает сделать Страуструп - сейчас под рукой его нет.
Вложение 637018
Миниатюры
Перегрузить операторы operator+() и operator*() в пользовательском классе "Комплексное число"  
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
20.01.2016, 20:26
на 190 странице УНАРНЫЕ операторы, а не БИНАРНЫЕ. У вас как с чтением?)
0
86 / 60 / 12
Регистрация: 06.06.2013
Сообщений: 216
20.01.2016, 20:45  [ТС]
Сейчас я имею ввиду не унарные/бинарные операции, а нестатические функции в целом. Я правильно понимаю, что при возвращении ссылки я должен использовать либо this, либо класс из параметров функции? И возвращаясь к теме, такой вариант с объявлением внутри класса был бы правильным?

C++
1
2
3
4
5
6
const complex& complex::operator- (const complex& z1)
{
    this->re -= z1.re;
    this->im -= z1.im;
    return *this;
}
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
20.01.2016, 21:16
Цитата Сообщение от Anvis Посмотреть сообщение
нестатические функции в целом
Это средняя температура по больнице...
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
20.01.2016, 21:30
Цитата Сообщение от Anvis Посмотреть сообщение
такой вариант с объявлением внутри класса был бы правильным?
Нет, т.к. он не соответствует семантике бинарного operator-. Бинарный operator- производит вычитание из левостороннего объекта правосторонний и записывает результат в новый объект. Здесь же бинарный operator- ведет себя как operator -=.
Причем, если таки записать operator- правильно
C++
1
2
3
4
5
6
const complex complex::operator- (const complex& z1) const
{
    this->re -= z1.re; // здесь
    this->im -= z1.im; // и здесь
    return *this;
}
, что семантически соответствует такой форме оператора в виде свободной функции
C++
1
2
3
const complex operator- (const complex& z0, const complex& z1);
// вместо такого варианта, соответствующего прежней записи
// const complex & operator- (complex& z0, const complex& z1);
, то компилятор даст по рукам за попытку модификации состояния класса, что как бы намекает.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.01.2016, 21:30

Перегрузить operator*
Подскажите, пожалуйста, как использовать operator* в void main в данной программе по аналогии с operator-&gt; Не разобрался полностью в...

Не могу нормально перегрузить operator <
Написал функцию f1, внутри которой используется std::sort. Вне этой функции перегрузил operator &lt; для string. Не подскажете, почему...

Перегрузить operator* для комплексных чисел
Нужно определить бинарный или унарный оператор a*b для комплексных чисел

Перегрузка операторов operator> и operator* для чисел в разных системах счисления
Мне нужно Перегрузить операции&gt; (сравнение двух целых чисел с учетом системы счисления), * (произведение таких чисел). Но я не могу понять...

Почему в данном случае используется operator int, а не operator double?
Вот программа using System; class ThreeD { int x, y, z; // трехмерные координаты public ThreeD() { x = y = z = 0; } ...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru