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

Нужно перегрузить операторы умножения и сложения

18.04.2016, 10:04. Показов 1520. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста в этой программе перегрузить операторы умножения и деления, буду очень благодарна..
#include <utility>
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <string>
#include <math.h>
using namespace std;
class Complex
{
public:
double Re();
double Im();
void ChangeRe (double); // получаем значение приватного поля действит части
void ChangeIm (double); // получаем значение приватного поля мнимой часть
double r(); //вычисляет наш модуль
double Phi();//вычисляет наш аргумент
void PrintAlg(); //выводит число в алгебраич. форме
void PrintTrig(); //выводит число в тригоном. форме
Complex Sum(Complex);
Complex Sub(Complex); //вычитание
Complex Prod(Complex); //произведение
Complex (double,double); //определим конструктор, сразу задавая действительную и мнимую часть
Complex (); // инициализирует 0-и
private:
double Re_; // действит.
double Im_; //мнимая часть

};
double Complex::Re()
{
return Re_;
}
double Complex::Im()
{
return Im_;
}
void Complex::ChangeRe(double x)
{
Re_=x;
}
void Complex::ChangeIm(double x)
{
Im_=x;
}
double Complex::r()//считаем модуль
{
return pow(pow(Re_,2)+pow(Im_,2),0.5);
}
double Complex::Phi()//считаем аргумент
{
return atan(Im_/Re_)*180/M_PI ;
}
void Complex::PrintAlg()
{
if (Im_ < 0)
cout << Re_ <<" - " << "i * " << -Im_;
else
cout << Re_ <<" + " << "i * " << Im_;
cout << endl;
}

void Complex::PrintTrig()
{
printf("%.2f * ( cos( %.2f ) + i * sin( %.2f ) )\n",r(),Phi(),Phi());
//return r*(cos(Phi)+Im_*(sin(Phi)));
}
Complex::Complex()
{
Re_=0;
Im_=0;
}
Complex::Complex(double a, double b)
{
Re_=a;
Im_=b;
}
Complex Complex::Sum(Complex c)
{
Complex sum(Re_+c.Re(),Im_+c.Im());
return sum;
}
Complex Complex::Sub(Complex c)
{
Complex sub(Re_-c.Re(),Im_-c.Im());
return sub;
}
Complex Complex::Prod(Complex c)
{
Complex prod(Re_*c.Re()-Im_*c.Im_,Re_*c.Im()+Im_*c.Re());
return prod;
}
int main()
{
cout << "Задали функцию f"<< endl << endl;
Complex f(1,1);
f.PrintAlg();
f.PrintTrig();
cout <<"Угол Фи "<<f.Phi() << endl;
cout << "" << endl << endl;
cout << "Задали f2, изменили мнимую часть и вывели" << endl << endl;
Complex f2;
f2.PrintAlg();
f2.ChangeIm(5);
f2.PrintAlg();
cout << " " << endl;
cout << "Сумма f2 и f" << endl;
f2 = f2.Sum(f);
f2.PrintAlg();
cout << "" << endl;
cout << " " << endl;
Complex f4;
cout<< "Разность f2 и f " << endl;
f4 = f4.Sub(f);
f4.PrintAlg();
cout << "" << endl;
cout << " " << endl;
cout << "Задали f3 (5,-3). Произведение: f3*f" << endl<< endl;
Complex f3(5,-3);
f3=f3.Prod(f);
f3.PrintAlg();
cout << " " << endl;
cout << " " << endl;
cout << "Задали f5 (3,4) и вывели его модуль " << endl<< endl;
Complex f5(3,4);
Cout<<»Задали f5(3,4) и вывели его модуль:»<<endl;
Complex<<f5.r()<<endl;



return 0;
getch ();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.04.2016, 10:04
Ответы с готовыми решениями:

Для класса "Рациональная дробь" перегрузить операторы сложения, вычитания, умножения и деления
Добрый вечер уважаемые участники форума. Прошу вас пожалуйста помочь с моим заданием. реализовать ввод и вывод данных через операторы...

Для класса, хранящего список чисел, перегрузить операторы сложения и вычитания
Для класса, хранящего список чисел, перегрузить операторы сложения и вычитания числа так, чтобы они добавляли и удаляли соответствующий...

Определите для класса Rational операторы сложения, вычитания, умножения и деления
Определите для класса Rational операторы сложения, вычитания, умножения и деления, так чтобы объекты типа Rational можно было складывать...

4
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
18.04.2016, 12:31
Лучший ответ Сообщение было отмечено eiza09 как решение

Решение

вот пример как перегрузить.
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
#pragma once
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
 
class Complex{
public:
    Complex();
    Complex(double);
    Complex(double, double);
    Complex(const Complex&);
    virtual ~Complex();
 
    Complex operator=(const Complex&);
    Complex operator+(const Complex&);
    Complex operator-(const Complex&);
    Complex operator*(const Complex&);
    Complex operator*(const double&);
    Complex operator/(const Complex&);
    Complex operator/(const double&);
 
    bool operator ==(const Complex&);
 
    virtual double abs() const;
    virtual Complex pow(int);
    friend std::ostream& operator<<(std::ostream&, const Complex&);
    friend bool cmp(Complex, double, double);
private:
    double real;
    double im;
protected:
    double getAngle();
};
 
Complex::~Complex(){}
 
Complex::Complex() :real(0), im(0){}
 
Complex::Complex(double r) : real(r), im(0){}
 
Complex::Complex(double r, double i):real(r), im(i){}
 
Complex::Complex(const Complex &copy):real(copy.real), im(copy.im){}
 
 
Complex Complex::operator=(const Complex &b){
    real = b.real;
    im = b.im;
    return *this;
}
 
Complex Complex::operator+(const Complex &b){
    return Complex(real + b.real, im + b.im);
}
 
Complex Complex::operator-(const Complex &b){
return Complex(real - b.real, im - b.im);
}
 
Complex Complex::operator*(const Complex &b){
    return Complex(real * b.real - im * b.im, real * b.im + im *b.real);
}
 
Complex Complex::operator*(const double &b){
    return Complex(real*b, im*b);
}
 
Complex Complex::operator/(const Complex &b){
    double r = b.real*b.real + b.im*b.im;
    return Complex((real*b.real + im * b.im) / r, (im * b.real - real*b.im) / r);
}
 
Complex Complex::operator/(const double &b){
    return Complex(real / b, im / b);
}
 
bool Complex::operator==(const Complex &b){
    int n = -5;
    double r = std::abs(real - b.real);
    double i = std::abs(im - b.im);
    return r <= std::pow(10, n) && i <= std::pow(10, n);
}
 
 
double Complex::abs()const{
    return sqrt(real*real + im*im);
}
 
Complex Complex::pow(int n){
    double phi = getAngle();
    double a = abs();
    return Complex(std::pow(a, n)*cos(n*phi), std::pow(a, n)*sin(n*phi));
}
 
std::ostream& operator<<(std::ostream& out, const Complex& cmp){
    out << cmp.real << (cmp.im < 0 ? " - " : " + ") << std::abs(cmp.im) << 'i';
    return out;
}
 
double Complex::getAngle(){
    if (real > 0){
        return atan(im / real);
    }
    if (real < 0){
        return ((im >= 0) ? M_PI : -M_PI) + atan(im / real);
    }
 
    return ((im >= 0) ? M_PI_2 : -M_PI_2);
}
0
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 54
18.04.2016, 12:42  [ТС]
Спасибо большое за программу, но вы не могли бы просто в моей программе перегрузить операторы + и *? если это возможно конечно.

Добавлено через 1 минуту
Я просто не понимаю этой темы перегрузка..
0
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
18.04.2016, 13:03
Лучший ответ Сообщение было отмечено eiza09 как решение

Решение

перегрузка оператора умножения для вашего класса

C++
1
2
3
Complex Complex::operator *(const Complex &c){
    return Complex(Re_*c.Re_ - Im_ * c.Im_, Re_ * c.Im() + Im_*c.Re_);
}
1
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 54
18.04.2016, 15:48  [ТС]
Презентация
Вложения
Тип файла: rar 5 Пример деревья решений.rar (89.7 Кб, 3 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.04.2016, 15:48
Помогаю со студенческими работами здесь

Разработать класс "Матрица" (перегрузить операции сложения, умножения, умножения на число)
Разработать класс матрица. Определить в нем конструктор перегрузить арифметические операции сложения умножения и умножения на число.

Перегрузить операции сложения, вычитания, деления и умножения комплексных чисел
Доброго времени суток. Помогите разобраться с перегрузкой метода. Суть в том, что необходимо перегрузить операции сложения, вычитания,...

Нужно написать программу сложения, вычитания, умножения, деления больших чисел - размером в 256 бит
Здравтсвуйте, уважаемые учатсники форума. У меня следующий вопрос. В инсте пишем на Фасме под Дос. Нужно написать программу сложения,...

Написать свой класс, реализующий матричную арифметику, операции сложения и умножения матриц. Сложения матрицы с числом и
Написать свой класс, реализующий матричную арифметику, операции сложения и умножения матриц. Сложения матрицы с числом и умножения матрицы...

Написать процедуру для сложения, умножения квадратных матриц N*N, и умножения матрицы на вектор
Написать процедуру для сложения, умножения квадратных матриц N*N, и умножения матрицы на вектор


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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