Перегрузка бинарных операций
Перегрузка унарных операций
Унарная функция-операция, определяемая внутри класса, должна быть представлена с помощью нестатического метода без параметров, при этом операндом является вызвавший ее объект.
Если функция определяется вне класса, она должна иметь один параметр типа класса.
Операции постфиксного инкремента и декремента должны иметь первый параметр типа int. Он используется только для того, чтобы отличить их от префиксной формы.
ЗАДАЧА 4.1. Пусть операция ++x увеличивает действительную и мнимую часть комплексного числа x на 1, а x++ увеличивает на 1 только действительную часть комплексного числа x.
#include <iostream>
using namespace std;
class complex {
float x; //Действительная часть комплексного числа.
float y; //Мнимая часть комплексного числа.
public:
complex(bool pr=true); //Конструктор класса
//Функция, перегружающая оператор ++x, в этом случае это метод без параметров.
complex operator++()
{
x++; y++; //Увеличиваем действительную и мнимую часть на 1.
return *this;
}
//Функция, перегружающая оператор x++, в этом случае это метод с абстрактным параметром
//целого типа. Наличие целого типа в скобках говорит только о том, что что перегружается //оператор x++, а не ++x.
complex operator++(int)
{
x++; //Увеличиваем действительную часть на 1.
return *this;
}
show_complex();
};
Бинарная функция-операция, определяемая внутри класса, должна быть представлена с помощью нестатического метода с параметрами, при этом вызвавший ее объект считается первым операндом, а параметр метода – вторым операндом.
ЗАДАЧА 4.2. Создать класс для работы с комплексными числами, в котором перегрузить операции сложения и вычитания.
Определение методов, перегружающих операции, внутри класса:
#include <iostream>
using namespace std;
class complex {
float x; //Действительная часть комплексного числа.
float y; //Мнимая часть комплексного числа.
public:
complex(bool pr=true); //Конструктор класса
complex operator+(complex M) //Метод, реализующий перегрузку операции сложения.
{
//Создаем комплексное число temp, в котором будет храниться результат
//сложения двух комплексных чисел.
complex temp(false);
//Действительная часть нового комплексного числа формируется, как результат сложения //действительной части первого и второго операнда, первым операндом является текущий //класс, вторым – передаваемое в функцию комплексное число M.
temp.x=x+M.x;
//Мнимая часть нового комплексного числа формируется, как результат сложения //мнимой части первого и второго операнда.
temp.y=y+M.y;
//Возвращаем сумму двух комплексных чисел, в качестве результата.
return temp;
};
complex operator-(complex M) //Метод, реализующий перегрузку операции вычитания.
{
complex temp(false);
//Действительная часть нового комплексного числа формируется, как результат //вычитания действительной части первого и второго операнда, первым операндом //является текущий класс, вторым – передаваемое в функцию комплексное число M.
temp.x=x-M.x;
//Мнимая часть нового комплексного числа формируется, как результат вычитания //мнимой части первого и второго операнда.
temp.y=y-M.y;
//Возвращаем разность двух комплексных чисел, в качестве результата.
return temp;
};
void show_complex();//Метод вывода комплексного числа на экран.
};
//Конструктор класса complex, с логическим параметром (true - по умолчанию), если параметр равен //true, то в конструкторе будет запрашиваться действительная и мнимая часть числа, если же //параметр конструктора равен 0, то будет создаваться комплексное число с нулевой действительной //и мнимой частью.
complex::complex(bool pr)
{
if (pr){
cout<<"VVedite x\t"; cin>>x; cout<<"Vvedite y\t"; cin>>y;
show_complex();
}
else{x=0;y=0;}
}
void complex::show_complex() //Метод вывода комплексного числа на экран.
{
if (y>=0) cout<<x<<"+"<<y<<"i"<<endl;
else cout<<x<<y<<"i"<<endl;
}
int main()
{
complex chislo1, chislo2, chislo4(false), chislo3(false);
//Для сложения двух комплексных чисел достаточно использовать операцию +.
chislo3=chislo1+chislo2;
cout<<"chislo3=";
chislo3.show_complex();
//Для вычитания двух комплексных чисел достаточно использовать операцию -.
chislo4=chislo1-chislo2;
cout<<"chislo4=";
сhislo4.show_complex();
return 1;
}
Определение методов, перегружающих операции, вне класса:
complex operator+(complex M1,complex M2) //Метод, реализующий перегрузку операции сложения.
{
complex temp(false);
temp.x= M1.x +M2.x;
temp.y= M1.y+M2.y;
return temp;
};
complex operator-(complex M1,complex M2) //Метод, реализующий перегрузку операции вычитания.
{
complex temp(false);
temp.x= M1.x-M2.x;
temp.y= M1.y –M2.y;
return temp;
};