Перегрузка бинарных операций

Перегрузка унарных операций

Унарная функция-операция, определяемая внутри класса, должна быть представлена с помощью нестатического метода без параметров, при этом операндом является вызвавший ее объект.

Если функция определяется вне класса, она должна иметь один параметр типа класса.

Операции постфиксного инкремента и декремента должны иметь первый параметр типа 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;

};