Форум программистов, компьютерный форум CyberForum.ru

классы.комплексные числа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Zheka91
4 / 4 / 1
Регистрация: 22.11.2010
Сообщений: 101
05.09.2011, 16:43     классы.комплексные числа #1
написал, но что то не работает, помогите пожалуйсто...
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
#include "stdafx.h"
#include "iostream"
using namespace std;
class complex{
    float re, im;
public:
    complex();
    complex(float r,float i){
        re = r; 
        im = i;
    }
    void show()const{
        cout<<re;
        if(im>0)
            cout<<"+";
        cout<<im<<"i"<<endl;
    }
    complex &operator=(const complex &per){
        re=per.re;
        im=per.im;
        return *this;
    }
    float abs(){
        return(re*re-im*im);
    }
    complex &operator+(const complex &per){
        complex temp;
        temp.re=re+per.re;
        temp.im=im+per.im;
        return temp;
    }
    complex &operator-(const complex &per){
        complex temp;
        temp.re=re-per.re;
        temp.im=im-per.im;
        return temp;
    }
    complex &operator*(const complex &per){
        complex temp;
        temp.re=re*per.re;
        temp.im=im*per.im;
        return temp;
    }
    complex &operator/(const complex &per){
        complex temp;
        float znam=per.re*per.re+per.im*per.im;
        temp.re=(re*per.re+im*per.im)/znam;
        temp.im=(im*per.re-re*per.im)/znam;
        return temp;
    }
};
void main()
{
    complex a(5,3),b(3,-3),c;
    c=a+b;
    c.show();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2011, 16:43     классы.комплексные числа
Посмотрите здесь:

C++ Комплексные числа
Комплексные числа C++
комплексные числа C++
C++ Комплексные числа
Комплексные числа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Петррр
 Аватар для Петррр
5914 / 3351 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
05.09.2011, 16:53     классы.комплексные числа #2
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
#include <iostream>
 
using namespace std;
 
class complex{
        float re, im;
public:
        complex()
        {
            re = 0;
            im = 0;
        }
        complex(float r, float i)
        {
                re = r; 
                im = i;
        }
        void show()const{
                cout<<re;
                if(im>0)
                        cout<<"+";
                cout<<im<<"i"<<endl;
        }
        complex &operator=(const complex &per){
                re=per.re;
                im=per.im;
                return *this;
        }
        float abs(){
                return(re*re-im*im);
        }
        complex &operator+(const complex &per){
                complex temp;
                temp.re=re+per.re;
                temp.im=im+per.im;
                return temp;
        }
        complex &operator-(const complex &per){
                complex temp;
                temp.re=re-per.re;
                temp.im=im-per.im;
                return temp;
        }
        complex &operator*(const complex &per){
                complex temp;
                temp.re=re*per.re;
                temp.im=im*per.im;
                return temp;
        }
        complex &operator/(const complex &per){
                complex temp;
                float znam=per.re*per.re+per.im*per.im;
                temp.re=(re*per.re+im*per.im)/znam;
                temp.im=(im*per.re-re*per.im)/znam;
                return temp;
        }
};
void main()
{
        complex a(5,3),b(3,-3),c;
        c=a+b;
        c.show();
        system("pause");
}
Enfernuz
 Аватар для Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
05.09.2011, 16:54     классы.комплексные числа #3
Операторы у вас возвращают ссылку на временный объект, который уничтожается после вызова функции-оператора. Соответственно, по адресу, куда ссылается ссылка, ничего нет. Сделайте операторы возвращаемыми объект.
Zheka91
4 / 4 / 1
Регистрация: 22.11.2010
Сообщений: 101
05.09.2011, 16:59  [ТС]     классы.комплексные числа #4
Цитата Сообщение от Enfernuz Посмотреть сообщение
Операторы у вас возвращают ссылку на временный объект, который уничтожается после вызова функции-оператора. Соответственно, по адресу, куда ссылается ссылка, ничего нет. Сделайте операторы возвращаемыми объект.
тоесть??как это??
LosAngeles
Заблокирован
05.09.2011, 17:01     классы.комплексные числа #5
& убери
Enfernuz
 Аватар для Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
05.09.2011, 17:19     классы.комплексные числа #6
Понятно, значит дело было именно в ссылках

Добавлено через 12 минут
Чтобы развеять сомнения: когда вы в теле функции создаете объект, проделываете с ним какие-то манипуляции, и возвращаете этот объект return'ом, происходит, на самом деле, вызов двух конструкторов --- первый для самого объекта, а второй для временного объекта, который как раз возвращается функцией. И, соответственно, вызов двух деструкторов.
Итого: после того как тело функции завершилось, перед командой return содержимое объекта копируется в "невидимый" временный объект, который возвращается командой return. После копирования созданный вами объект уничтожается. "Невидимый" временный объект уничтожается после выполнения команды return. Поэтому, возвратив ссылку на локальный объект (существующий только в пределах тела функции), вы на самом деле возвращаете ссылку на уничтоженный объект.
Zheka91
4 / 4 / 1
Регистрация: 22.11.2010
Сообщений: 101
05.09.2011, 17:43  [ТС]     классы.комплексные числа #7
подскажите пожалуйста еще как сделать <,>,==,!=
Enfernuz
 Аватар для Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
05.09.2011, 17:52     классы.комплексные числа #8
Комплексные числа не обладают свойством упорядоченности, поэтому операторы ">" и "<" вводить смысла нет.
"==" --- если равны по модулю и аргументу, по-другому никак. Аналогично "!=".
Zheka91
4 / 4 / 1
Регистрация: 22.11.2010
Сообщений: 101
05.09.2011, 18:03  [ТС]     классы.комплексные числа #9
Цитата Сообщение от Enfernuz Посмотреть сообщение
Комплексные числа не обладают свойством упорядоченности, поэтому операторы ">" и "<" вводить смысла нет.
"==" --- если равны по модулю и аргументу, по-другому никак. Аналогично "!=".
а скажите пожалуйсто как это через оператор написать..?
Enfernuz
 Аватар для Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
05.09.2011, 18:33     классы.комплексные числа #10
Псевдокод:
C++
1
2
3
4
5
6
7
bool complex::operator==(const complex& right)
{
      if(this->module == right.module && this->arg == right.arg)
          return true;
      else
          return false;
}
Соответственно, "!=" можно описать так:
C++
1
2
3
4
5
6
7
bool complex::operator!=(const complex& right)
{
        if(this->module == right.module && this->arg == right.arg)
          return false;
        else
          return true;
}
или так
C++
1
2
3
4
5
6
7
bool complex::operator!=(const complex& right)
{
       if(*this == right)
          return false;
       else
          return true;
}
Если дано комплексное число x + y*b, то модуль этого числа равен r = sqrt(x^2+y^2). Тригонометрическое представление такого комплексного числа: r * (cos(phi) + i*sin(phi)). Соответственно, аргумент можно найти как phi = arctg(x/y) или phi = arccos(x/r), или phi = arcsin(y/r).
Zheka91
4 / 4 / 1
Регистрация: 22.11.2010
Сообщений: 101
05.09.2011, 18:41  [ТС]     классы.комплексные числа #11
Цитата Сообщение от Enfernuz Посмотреть сообщение
Псевдокод:
C++
1
2
3
4
5
6
7
bool complex::operator==(const complex& right)
{
      if(this->module == right.module && this->arg == right.arg)
          return true;
      else
          return false;
}
Соответственно, "!=" можно описать так:
C++
1
2
3
4
5
6
7
bool complex::operator!=(const complex& right)
{
        if(this->module == right.module && this->arg == right.arg)
          return false;
        else
          return true;
}
или так
C++
1
2
3
4
5
6
7
bool complex::operator!=(const complex& right)
{
       if(*this == right)
          return false;
       else
          return true;
}
а чего такое this-> ?
Петррр
 Аватар для Петррр
5914 / 3351 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
05.09.2011, 18:43     классы.комплексные числа #12
Zheka91, этот вопрос задается каждые пять страниц. Причем не только в С++. Посмотрите в интернете.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2011, 18:48     классы.комплексные числа
Еще ссылки по теме:

Классы, комплексные числа и перегрузка оператора C++
Классы и объекты (комплексные числа) C++
Классы, комплексные числа, возможность записи comp(3+2.2i) C++

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

Или воспользуйтесь поиском по форуму:
Enfernuz
 Аватар для Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
05.09.2011, 18:48     классы.комплексные числа #13
Функция-оператор в таком виде является функцией-членом класса, а потому этот оператор вызывается левым операндом, поэтому в функцию скрыто передаётся указатель this на этот операнд.

Добавлено через 3 минуты
И, кстати, ещё по поводу вашего примера: современный стандарт C++ требует объявлять main типа int. void main() --- это в C.
Yandex
Объявления
05.09.2011, 18:48     классы.комплексные числа
Ответ Создать тему
Опции темы

Текущее время: 23:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru