Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2011, 11:14   #1
JaEvg
 
Регистрация: 08.10.2010
Сообщений: 4
Восклицание Комплексные числа/перегрузка

Чот уже вторую неделю бьюсь над кодом, а осилить не могу, подскажите
Код:
#include <iostream.h>
#include <conio.h>
#include <math.h>
class Complex
{
private:
double real; // Действительная часть
double image; // Мнимая часть
public:
Complex() {}; // Конструктор по умолчанию
Complex(double r) { real = r; image = 0; } // Конструктор
Complex(double r, double i) { real = r, image = i; } // Конструктор
~Complex() {} // Деструктор
double root() // Корень комплексного числа
{ double x, y;
    return sqrt(x * x - y * y);
}
Complex operator+(Complex &); // Перегрузка оператора сложения
Complex operator-(Complex &); // Перегрузка оператора вычитания
Complex operator*(Complex &); // Перегрузка оператора умножения
Complex operator/(Complex &); // Перегрузка оператора деления
// Перегрузка функции-оператора << для вывода класса Complex
friend ostream &operator<<(ostream &, Complex &);
// Перегрузка функции-оператора >> для ввода класса Complex
friend istream &operator>>(istream &, Complex &);
};
// Перегрузка +
Complex Complex::operator+(Complex &fp1)
{
fp1.real = real + fp1.real;
fp1.image = image + fp1.image;
return fp1;
}
// Перегрузка -
Complex Complex::operator-(Complex &fp1)
{
fp1.real = real - fp1.real;
fp1.image = image - fp1.image;
return fp1;
}
// Перегрузка *
Complex Complex::operator*(Complex &fp1)
{
double i, j;
i = real * fp1.real - image * fp1.image;
j = real * fp1.image + fp1.real * image;
fp1.real = i;
fp1.image = j;
return fp1;
}
// Перегрузка /
Complex Complex::operator/(Complex &fp1)
{
double k, i, j;
k = fp1.real * fp1.real + fp1.image * fp1.image;
i = (real * fp1.real + image * fp1.image) / k;
j = (fp1.real * image - real * fp1.image) / k;
fp1.real = i;
fp1.image = j;
return fp1;
}
// Перегрузка оператора <<
ostream &operator<< (ostream &fo, Complex &fp)
{
if (fp.image < 0) fo << fp.real << "+i(" << fp.image << ")\n";
else fo << fp.real << "+i" << fp.image << "\n";
return fo;
}
// Перегрузка оператора >>
istream &operator>>(istream &fi, Complex &fp)
{
cout << "Введите действительную часть: ";
fi >> fp.real;
cout << "Введите мнимую часть: ";
fi >> fp.image;
return fi;
}
void main()
{
clrscr();
// Комплексные числа
Complex c1, c2;
// Ввод комплексных чисел
cin >> c1;
cin >> c2;
// Вывод комплексных чисел
cout << "\nc1 = " << c1;
cout << "c2 = " << c2 << '\n';
cout<<"Корень комплексного числа:\n" << root\t;
// Вывод результатов операций
cout << "c1 + c2 = " << (c1 + c2);
cout << "c1 - c2 = " << (c1 - c2);
cout << "c1 * c2 = " << (c1 * c2);
cout << "c1 / c2 = " << (c1 / c2);
getch();
}
Там по заданию основные операции и их перегрузки и корень числа

Последний раз редактировалось JaEvg; 05.03.2011 в 11:19.
JaEvg вне форума Ответить с цитированием
Старый 05.03.2011, 11:30   #2
pwian
Пользователь
 
Регистрация: 03.07.2009
Сообщений: 21
По умолчанию

А что значит не можешь осилить? Чем помочь-то? И ты уверен, что:
double root() // Корень комплексного числа
{ double x, y;
return sqrt(x * x - y * y);
}
Ведь при некоторых x,y будет извлечение из отрицательного значения.
pwian вне форума Ответить с цитированием
Старый 05.03.2011, 11:31   #3
pwian
Пользователь
 
Регистрация: 03.07.2009
Сообщений: 21
По умолчанию

Думаю следует записать:
Complex root(); А дальше какое-то другое тело этой процедуры.
pwian вне форума Ответить с цитированием
Старый 05.03.2011, 11:40   #4
pwian
Пользователь
 
Регистрация: 03.07.2009
Сообщений: 21
По умолчанию

Ты написал:
Цитата:
// Перегрузка оператора <<
ostream &operator<< (ostream &fo, Complex &fp)
{
if (fp.image < 0) fo << fp.real << "+i(" << fp.image << ")\n";
else fo << fp.real << "+i" << fp.image << "\n";
return fo;
}
Думаю, что лучше будет так:
// Перегрузка оператора <<
ostream &operator<< (ostream &fo, Complex &fp)
{
if (fp.image < 0) fo << fp.real << "-i(" << fabs(fp.image) << ")\n"; //+исправил на -
else fo << fp.real << "+i" << fp.image << "\n";
return fo;
}
pwian вне форума Ответить с цитированием
Старый 05.03.2011, 11:45   #5
pwian
Пользователь
 
Регистрация: 03.07.2009
Сообщений: 21
По умолчанию

Цитата:
cout<<"Корень комплексного числа:\n" << root\t;
cout<<"Корень комплексного числа c1:\n" << c1.root()<<"\n";
cout<<"Корень комплексного числа c2:\n" << c2.root()<<"\n";
pwian вне форума Ответить с цитированием
Старый 05.03.2011, 14:26   #6
JaEvg
 
Регистрация: 08.10.2010
Сообщений: 4
По умолчанию

С корнем-то понятно, попробую
Вот только при компиляции выдаёт ошибки:
333.cpp:23: error: ISO C++ forbids declaration of `ostream' with no type
333.cpp:23: error: `ostream' is neither function nor member function; cannot be declared friend
333.cpp:23: error: expected `;' before '&' token
333.cpp:25: error: ISO C++ forbids declaration of `istream' with no type
333.cpp:25: error: `istream' is neither function nor member function; cannot be declared friend
333.cpp:25: error: expected `;' before '&' token
333.cpp:63: error: expected constructor, destructor, or type conversion before '&' token
333.cpp:63: error: expected `,' or `;' before '&' token
333.cpp:70: error: expected constructor, destructor, or type conversion before '&' token
333.cpp:70: error: expected `,' or `;' before '&' token
333.cpp:79: error: `main' must return `int'
333.cpp:79: error: return type for `main' changed to `int'
333.cpp: In function `int main(...)':
333.cpp:80: error: `clrscr' undeclared (first use this function)
333.cpp:80: error: (Each undeclared identifier is reported only once for each function it appears in.)
333.cpp:84: error: `cin' undeclared (first use this function)
333.cpp:87: error: `cout' undeclared (first use this function)

чот в плане перегрузки ввода вывода, что можно сделать в этом направлении
JaEvg вне форума Ответить с цитированием
Старый 06.03.2011, 14:23   #7
JaEvg
 
Регистрация: 08.10.2010
Сообщений: 4
По умолчанию

Можно объяснить такую фразу по этому коду?:
"нужно всего лишь добавить const для второго аргумента <<, в прототип и в реализацию"
JaEvg вне форума Ответить с цитированием
Старый 07.03.2011, 03:09   #8
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

омг, добавь везде std:stream, std::istream, std::cin, std::cout
onewho вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комплексные числа Программер Михаил Общие вопросы C/C++ 7 28.11.2012 00:03
Комплексные числа в С++ Slavytich Помощь студентам 0 25.12.2010 03:34
Комплексные числа Оля_1991 Помощь студентам 1 19.09.2010 21:10
Комплексные числа shtuceron Помощь студентам 2 21.01.2010 23:47
Комплексные числа 777UFO777 Общие вопросы Delphi 0 21.12.2008 23:48