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

Помогите с Объектно Ориентированным Программированием. Комплексные числа

28.09.2011, 14:24. Показов 1651. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно разработать класс для работы с комплексными числами (2 поля - действительное и мнимое)
Методы: Сложение, вычитание и умножение, вывод на эран. Всё с использованием конструктора
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2011, 14:24
Ответы с готовыми решениями:

Помогите с Объектно Ориентированным Программированием
Нужно разработать класс для работы с комплексными числами (2 поля - действительное и мнимое) ...

Написать калькулятор с объектно–ориентированным подходом
Написать калькулятор, но с объектно–ориентированным подходом, и выводом пользователю информации о...

Может ли скриптовый язык быть объектно ориентированным?
Запутался: Скриптовый - какой-то там. Это классификация по какому признаку? ...

Помогите решить комплексные числа
вот посмотрите, тут

17
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
28.09.2011, 14:35 2
Delllinger, что конкретно непонятно? Это задание мелькало уже тысячи раз на форуме/в интернете/в литературе и к нему есть столько же готовых решений. Чем вы уникальны?
0
Заблокирован
Автор FAQ
28.09.2011, 15:49 3
Цитата Сообщение от Delllinger Посмотреть сообщение
Нужно разработать класс для работы с комплексными числами (2 поля - действительное и мнимое)
Методы: Сложение, вычитание и умножение, вывод на эран. Всё с использованием конструктора
CComplex.h
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
#ifndef CCOMPLEX_H
#define CCOMPLEX_H
 
#include <stdio.h>
 
class CComplex
{
private:
    float re;
    float im;
public:
    CComplex(){re = 0; im = 0;};//конструктор по умолчанию
    CComplex(float _re = 0, float _im = 0){re = _re; im = _im;};//конструктор преобразования
 
    //Кроме = не использую &
    //т.к  = единсвенный оператор который может изменять значение исходной переменной
    //после всех остальных операторов переменные не должны терпеть изменений
    CComplex operator + (CComplex val)
    {
        return CComplex(re + val.re,im + val.im);
    }
    CComplex operator - (CComplex val)
    {
        return CComplex(re - val.re,im - val.im);
    }
    CComplex operator * (CComplex val)
    {
        return CComplex
            (
                re*val.re - im*val.im, 
                im*val.re + re*val.im
            );
    }
    CComplex &operator = (float val)
    {
        re = val;
    }
    CComplex &operator = (CComplex val)
    {
        re = val.re;
        im = val.im;
        return CComplex(re,im);
    }
    void Show()
    {
        printf("%.f + j*(%.f)\r\n",re,im);
    }
};
 
#endif
main.cpp
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "CComplex.h"
#include <conio.h>
 
int main()
{
    CComplex a = 5.2;//5.2 + j*0
    CComplex b(5.3,6.3);
    printf("a = ");a.Show();
    printf("b = ");b.Show();
 
    printf("a + b = ");(a + b).Show();
    CComplex c = a + b;
    c = (c * a);
    printf("c * a = ");c.Show();
    getch();
    return 0;
}
a = 5 + j*(0)
b = 5 + j*(6)
a + b = 11 + j*(6)
c * a = 55 + j*(33)

PS:При желании можно ввести деление и другие матфункции сделав класс полной функциональности
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
28.09.2011, 15:59 4
Учимся пользоваться поиском:
https://www.cyberforum.ru/sear... id=3586669
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
28.09.2011, 16:01 5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
2
CComplex(){re = 0; im = 0;};//конструктор по умолчанию 
CComplex(float _re = 0, float _im = 0){re = _re; im = _im;};//конструктор преобразования
первый конструктор излишен к тому же получается неоднозначность, какой их них вызвать
0
Заблокирован
Автор FAQ
28.09.2011, 16:12 6
Цитата Сообщение от Jupiter Посмотреть сообщение
первый конструктор излишен к тому же получается неоднозначность, какой их них вызвать
сделал конструктор по умолчанию чтобы в программе можно было так писать
CComplex a;
a = 5;
CComplex b(5.3,6.3);
//т.е полный функционал

CString так же имеет и тот и тот конструкторы...
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
28.09.2011, 16:14 7
-=ЮрА=-, если ты его удалишь, то в программе тоже можно будет так писать. Полный функционал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class foo
{
public:
    foo(int x = 0, int y = 0);
 
private:
    int _x, _y;
};
 
foo::foo(int x, int y)
    : _x(x), _y(y)
{
}
 
int main()
{
    foo f1, f2(3, 4);
    return 0;
}
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
28.09.2011, 16:15 8
-=ЮрА=-, если в Вашем коде функции main 7-ю строку заменить на
C++
1
CComplex a;// = 5.2;//5.2 + j*0
то вы получите ошибку компиляции о неоднозначности
0
Заблокирован
Автор FAQ
28.09.2011, 17:05 9
Цитата Сообщение от Jupiter Посмотреть сообщение
-=ЮрА=-, если в Вашем коде функции main 7-ю строку заменить на
- думаю проще тогда заменить конструктор преобразования
C++
1
CComplex(float _re, float _im){re = _re; im = _im;};
+ заменив конструктор преобразования столкнулся с эрором, поэтому в этом случае перегрузку

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
CComplex &operator = (float val)
сделал уже так
C++
1
2
3
4
5
CComplex &operator = (float val)
    {
        re = val;
        return CComplex(re,im);
    }
Добавлено через 14 секунд
Цитата Сообщение от Jupiter Посмотреть сообщение
-=ЮрА=-, если в Вашем коде функции main 7-ю строку заменить на
- думаю проще тогда заменить конструктор преобразования
C++
1
CComplex(float _re, float _im){re = _re; im = _im;};
+ заменив конструктор преобразования столкнулся с эрором, поэтому в этом случае перегрузку

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
CComplex &operator = (float val)
сделал уже так
C++
1
2
3
4
5
CComplex &operator = (float val)
    {
        re = val;
        return CComplex(re,im);
    }
При таком построении класса код ниже компилируется
Код на Си
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    CComplex a;a = 5.2;//5.2 + j*0
    CComplex b(5.3,6.3);
    printf("a = ");a.Show();
    printf("b = ");b.Show();
 
    printf("a + b = ");(a + b).Show();
    CComplex c = a + b;
    c = (c * a);
    printf("c * a = ");c.Show();
    getch();
    return 0;
}


Добавлено через 16 минут

Не по теме:

Вообще не буду отвечать если вступаю в дискусию и минусуют...

0
Nameless One
28.09.2011, 17:18
  #10

Не по теме:

Код на Си
это не код на Си

0
-=ЮрА=-
28.09.2011, 17:19
  #11

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
это не код на Си
- минус за это?

0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
28.09.2011, 17:21 12
C++
1
2
3
4
5
6
CComplex &operator = (CComplex val)
        {
                re = val.re;
                im = val.im;
                return CComplex(re,im);
        }
А что в 5 строчке происходит? Создается новый объект и возвращается?
0
Заблокирован
Автор FAQ
28.09.2011, 17:28 13
Цитата Сообщение от Chelioss Посмотреть сообщение
Создается новый объект и возвращается?
- Возвращаем новый объект CComplex(re,im) - инициализированный val
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
28.09.2011, 17:42 14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- Возвращаем новый объект CComplex(re,im) - инициализированный val
Возвращаем же ссылку, так? А объект то, созданный внутри метода уничтожится при завершении работы метода, тогда почему это работает?
0
Заблокирован
Автор FAQ
28.09.2011, 17:50 15
Цитата Сообщение от Chelioss Посмотреть сообщение
Возвращаем же ссылку, так? А объект то, созданный внутри метода уничтожится при завершении работы метода, тогда почему это работает?
ССomplex(float _re,float _im) подразумевает выделение памяти под новый объект, privat переменные принимаеют значение _re и _im и после возврата функции не уничтожаются на мой взглад так
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
28.09.2011, 18:13 16
-=ЮрА=-
На этой строчке:
C++
1
CComplex &operator = (CComplex val)
Предупреждение 2 warning C4172: возвращение адреса локальной или временной переменной

Объект, созданный в методе, уничтожается и возвращается адрес уже на чужую память. Так нельзя делать.
0
Nameless One
28.09.2011, 18:45
  #17

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
минус за это?
не знаю. Я тебя не минусовал

0
71 / 76 / 9
Регистрация: 30.06.2011
Сообщений: 176
28.09.2011, 20:45 18
C++
1
2
3
4
5
6
 CComplex &operator = (CComplex val)
{
    re = val.re;
    im = val.im;
    return *this;
}
0
28.09.2011, 20:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2011, 20:45
Помогаю со студенческими работами здесь

Помогите с программированием в MathCad
Есть задача: с помощью элементов программирования решить задачу поворота матрицы MxN на 90 градусов...

Помогите с программированием пожалуйста.
Задали в универе по информатике((

Помогите новичку c программированием STM8S003F3
Приветствую всех участников форума. Имеется у нас устройства для корректировки показаний...

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru