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

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

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


http://www.cyberforum.ru/cpp-beginners/thread1552909.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2016, 10:04
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Нужно перегрузить операторы умножения и сложения (C++):

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

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

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

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

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

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...

Перегрузить операторы = и [] для hash
есть оператор который возвращает значение по ключу, как правильно написать...

Как перегрузить операторы вне класса?
как перегрузить операторы вне класса? class ErkarTiv { public: char a;...


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

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

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