Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
eiza09
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 48
1

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

18.04.2016, 10:04. Просмотров 881. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2016, 10:04
Ответы с готовыми решениями:

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

В классе перегрузить операцию сложения
Здравствуйте. Помогите кто сможет. Задание, нужно создать два прямоугольника,...

Перегрузить операторы
Перегрузить операторы. Использовать спроектированые классы структур данных в...

Перегрузить оператор сложения для вектора
Всем привет! не компилируется, понять не могу почему, ругается на оператор...

Как перегрузить операторы
Есть класс &quot;Бегемоты&quot; у бегемотов есть пол и вес. Перегрузить операторы...

4
Apostol584
242 / 148 / 118
Регистрация: 26.11.2012
Сообщений: 375
Завершенные тесты: 2
18.04.2016, 12:31 2
Лучший ответ Сообщение было отмечено 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
eiza09
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 48
18.04.2016, 12:42  [ТС] 3
Спасибо большое за программу, но вы не могли бы просто в моей программе перегрузить операторы + и *? если это возможно конечно.

Добавлено через 1 минуту
Я просто не понимаю этой темы перегрузка..
0
Apostol584
242 / 148 / 118
Регистрация: 26.11.2012
Сообщений: 375
Завершенные тесты: 2
18.04.2016, 13:03 4
Лучший ответ Сообщение было отмечено 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
eiza09
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 48
18.04.2016, 15:48  [ТС] 5
Презентация
0
Вложения
Тип файла: rar 5 Пример деревья решений.rar (89.7 Кб, 1 просмотров)
18.04.2016, 15:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2016, 15:48

Перегрузить операцию сложения для класса дробей
Люди добрые, помогите инвалиду;) Нужно написать программу на Си, задача такова:...

Перегрузить операторы вектора, vector2d
Чтоб вы меня больше понимали, начну издалека. Вот, допустим, есть задача,...

Перегрузить операторы сравнения и отсортировать
Добрый день. Требуется отсортировать данные из файла формата &quot;тип1 тип2 тип3...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru