Малость проболел и не успел сделать лабу, потому нашел исходник в инете, но проблема в том, что тут нужно реализовать перегрузку операторов умножить и разделить друзьями функции. А тут, на сколько я разобрался, методами. Как сделать что бы перегрузка оператора была друзьями?
программа требует ввод комплексных значений в виде Re и Im, которые помещаются в безопасный массив. . Затем формирует комплексные числа и производит с ними операции.
Код: Выделить всё
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std; // Переход в пространство имен 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 () {} // Деструктор
float abs () // Модуль комплексного числа
{
return sqrt (real * real + image * image);
}
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 << "Please enter a valid part: ";
fi >> fp.real;
cout << "Enter the imaginary part: ";
fi >> fp.image;
return fi;
}
class massiv
{
int size; // Определение размера
Complex *pm;
public:
massiv() {size = 0; pm = NULL;} // Конструктор по умолчанию
massiv (int i) : size (i) // Конструктор по размеру массива
{
if (size < 0){cout << "\nError: the size of >= 0" << "\n"; getch (); exit (0);}
// Создание массива
pm = new Complex [size];
for (int j = 0; j < size; j++)
*(pm+j) = Complex(0,0);
}
Complex &operator [](int i) // Перегрузка []
{
if((i<0) || (i >= size)){cout << "\nError: ''The small size of the array declared''" << "\n"; getch (); exit (0);}
// Если объявленный массив меньше массива который определен, то завершить программу
return pm[i];
}
};
void main()
{
cout << "\nLab number 3 on the course ''Mathematical models of electronic devices''\n";
cout << "\nCreating a custom type of a complex number\n\n\n";
cout << "Faculty: REF\nGroup: RE3-81\nStudent: Kopylov A.A.\nInstructor: Neveyko E.N.\n\n\n";
//clrscr();
// Комплексные числа
Complex c1, c2, c3, c4, c5;
// Ввод комплексных чисел
cin >> c1;
cin >> c2;
cin >> c3;
cin >> c4;
cin >> c5;
massiv pm(5); // 5 - это размер массива
// Определение массива
pm[0]=c1;
pm[1]=c2;
pm[2]=c3;
pm[3]=c4;
pm[4]=c5;
// Вывод комплексных чисел
cout << "\nc1 = " << c1;
cout << "c2 = " << c2;
cout << "c3 = " << c3;
cout << "c4 = " << c4;
cout << "c5 = " << c5 << '\n';
cout << "The module c1: " << c1.abs() << "\n\n";
// Вывод результатов операций
cout << "c1 + c2 = " << (c1 + c2);
cout << "c1 - c3 = " << (c1 - c3);
cout << "c1 * c4 = " << (c1 * c4);
cout << "c1 / c5 = " << (c1 / c5) << "\n\n";
// Вывод результатов операций с использованием массива
cout << "Output the results of operations using an array:\n";
cout << "pm[0] + pm[1] = " << (pm[0] + pm[1]);
cout << "pm[0] - pm[2] = " << (pm[0] - pm[2]);
cout << "pm[0] * pm[3] = " << (pm[0] * pm[3]);
cout << "pm[0] / pm[4] = " << (pm[0] / pm[4]);
getch();
}
