• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Перегрузка операторов комплексных чисел в С++

  • Автор темы Автор темы Airwind
  • Дата начала Дата начала

Airwind

Ученик
Регистрация
2 Июл 2010
Сообщения
1
Реакции
0
Баллы
0
Перегрузка операторов комплексных чисел в С++

Помогите, пожалуйста, решить задачу по С++:
Для класса "комплексное число" с данными double Re; double Im; выполнить перегрузку операций ввода, вывода, сложения (+ и +=), сложения с действительными числами и сравнения.
 
Если не ошибаюсь, то в C++ уже есть библиотека для работы с комплексными:

Header: <complex>

Namespace: std

Правда, там нет перегрузки I/O. Но она есть вот здесь:

_http://dmtsoft.ru/bn/370/as/oneaticleshablon/
 
Я жду великое математическое открытие - сравнение двух комплексных чисел!
Или речь идет о проверке на равенство?
 
Последнее редактирование:
С перегруженными == и !=:

Код:
/* Использованы материалы с 
_http://dmtsoft.ru/bn/370/as/oneaticleshablon/ */

#include <iostream>
#include <cmath>
 
using namespace std;

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 abs()   // Модуль комплексного числа
		{
			return sqrt(pow(real, 2.0) - pow(image, 2.0));
		}
 
		Complex operator+(Complex &);	// Перегрузка оператора сложения
		Complex operator-(Complex &);	// Перегрузка оператора вычитания
		Complex operator*(Complex &);	// Перегрузка оператора умножения
		Complex operator/(Complex &);	// Перегрузка оператора деления
    bool operator == (Complex & val)
    {
      if ((this->real == val.real) && (this->image == val.image))
      {
        return true;
      }
      else
      {
        return false;
      }
    }
    bool operator != (Complex & val)
    {
      if ((this->real == val.real) && (this->image == val.image))
      {
        return false;
      }
      else
      {
        return true;
      }
    }

		// Перегрузка функции-оператора << для вывода класса 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;
	}
 
int main()
{
	// Комплексные числа
	Complex c1, c2;
 
	// Ввод комплексных чисел
	cin >> c1;
	cin >> c2;
 
	// Вывод комплексных чисел
	cout << "\nc1 = " << c1;
	cout << "c2 = " << c2;
    if (c1 == c2) 
    {
      cout << "c1 = c2\r\n";
    }
    if (c1 != c2)
    {
      cout << "c1 != c2\r\n";
    }
	cout << "Модуль c1: " << c1.abs() << "\n\n";
 
	// Вывод результатов операций
	cout << "c1 + c2 = " << (c1 + c2);
	cout << "c1 - c2 = " << (c1 - c2);
	cout << "c1 * c2 = " << (c1 * c2);
	cout << "c1 / c2 = " << (c1 / c2);
  return 0;
}

Long Cat, меня терзают смутные сомнения: а вы не бот часом? :). Когда ни зайду, всегда Вы на форуме.
 
ОФФ ТОП..
Long Cat -
ты серьезно :)) не ожидал.:D

artes33 - очень многие, постоянно или очень часто тут сидят :)
 
Из-за того, что на форуме отключена технология RSS, а e-mail с уведомлениями накрылся, приходится изобретать, чтобы быть в курсе событий.
 
Назад
Сверху