0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 54

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

18.04.2016, 10:04. Показов 1444. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru