Основы программирования C++. Дружественные функции и перегрузка операторов. Лекция 8

Слайд 2

Мем

Мем

Слайд 3

Дружественная функция Дружественная функция — это функция, которая не является членом

Дружественная функция

Дружественная функция — это функция, которая не является членом класса,

но имеет доступ к членам класса, объявленным в полях private или protected.
То есть такая функция не привязана к объекту, но может использовать данные объектов.
Объявляется и описывается функция как обычная вне класса, но подсоединяется к классу с меткой friend.
Слайд 4

Пример class Int { int val; public: Int(int _val = 0){val

Пример

class Int
{
int val;
public:
Int(int _val = 0){val = _val;}
friend Int plusInt(Int l,

Int r);
friend void showValue(Int dat)
{
cout << dat.val << endl;
}
};

Int plusInt(Int l, Int r)
{
Int res(l.val + r.val);
return res;
}

Слайд 5

Перегрузка операторов При помощи перегрузки операторов, для созданных классов можно определить

Перегрузка операторов

При помощи перегрузки операторов, для созданных классов можно определить поведение

большинства стандартных операторов С++. То есть для, например, определенного пользователем класса комплексного числа можно определить арифметические операторы. Также можно переопределить приведение типов.
Обычно перегрузка операторов производится с помощью дружественных функций для удобства.
Слайд 6

Пример переопределения class Complex { int Re; int Im; public: Complex(int

Пример переопределения

class Complex
{
int Re;
int Im;
public:
Complex(int r = 0, int i =

0) { Re = r; Im = i; }
friend Complex operator+(Complex &l, Complex &r);
void show()
{
cout << Re << " + " << Im <<"i"<< endl;
}
};

Complex operator+(Complex &l, Complex &r)
{
return Complex(l.Re + r.Re, l.Im + r.Im);
}

Для закрепления определить оператор вычитания

Слайд 7

Оператор приведения С помощью перегрузок операторов, можно создавать операторы приведения типов.

Оператор приведения

С помощью перегрузок операторов, можно создавать операторы приведения типов.
Пример приведения

к типу int
operator int()
{
return Re;
}
Тем самым при вызове явного приведения типа объекта Complex к Int, вернётся значение действительного числа.
Слайд 8

Какие операторы не переопределяются

Какие операторы не переопределяются

Слайд 9

Задание Переопределить операторы: Присваивания Приведения к float Унарный минус Умножения

Задание

Переопределить операторы:
Присваивания
Приведения к float
Унарный минус
Умножения