Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

 

Функция-оператор может быть другом класса, а не только его членом. Поскольку функции-друзья не являются членами класса, они не могут иметь неявный аргумент this. Поэтому при перегрузке дружественной бинарной функции-оператора оба операнда передаются функции, а при перегрузке унарных операторов передаётся один операнд. Следующие операторы не могут использовать перегрузку с помощью функций-друзей: =, (), [], и ->. В качестве примера ниже рассматривается модифицированная версия предыдущей программы, в которой оператор + перегружен с помощью дружественной функции.

 

Листинг 2

 

#include <iostream.h>

 

class three_d {

int x,y,z;

public:

friend three_d operator+(three_d op1, three_d op2);

three_d operator=(three_d t);

 

void show();

void assign(int mx, int my, int mz);

};

//

three_d operator+(three_d op1, three_d op2)

{

three_d temp;

 

temp.x=op1.x+op2.x;

temp.y=op1.y+op2.y;

temp.z=op1.z+op2.z;

return temp;

}

//

three_d three_d::operator=(three_d t)

{

x=t.x;

y=t.y;

z=t.z;

return *this;

}

//

void three_d::show()

{

cout << x <<",";

cout << y <<",";

cout << z <<"\n";

}

//

void three_d::assign(int mx, int my, int mz)

{

x=mx;

y=my;

z=mz;

}

 

int main()

{

three_d a,b,c;

 

a.assign(1,2,3);

b.assign(10,10,10);

 

a.show();

b.show();

 

c=a+b;

c.show();

 

c=a+b+c;

c.show();

 

c=b=a;

c.show();

b.show();

 

return 0;

}

 

Перегрузка бинарного оператора с использованием дружественных функций позволяет использовать встроенные типы с объектами в одном выражении.

 

Контрольные вопросы.

1. Какие классы и функции называются дружественными?

2. Как осуществляется перегрузка операций?

3. Какие операторы не могут быть перегружены?

4. Какие операторы не могут быть перегружены как дружественные?

Лабораторное задание

Напишите программу согласно Вашему варианту задания с использованием проектов.


 

Варианты заданий

1, 4, 7, 10, 13, 16, 19, 22, 25, 28 Определить класс – матрица размера 2X2. Элементы матрицы числа типа double. В класс включить функцию, задающую матрицу по передаваемым параметрам, функцию, выдающую матрицу в виде квадратной таблицы на экран и перегрузить операторы + и *, чтобы они выполняли операции сложения и умножения матриц размера 2X2, а также оператор * так, чтобы он выполнял и операцию умножения матрицы на действительное число типа double справа и слева.
2, 5, 8, 11, 14, 17, 20, 23, 26, 29 Определить класс – комплексное число. В класс включить конструктор, задающий значение числа по передаваемым параметрам (действительной и мнимой части), функции, возвращающие действительную и мнимую части числа, перегрузить операторы + и *, чтобы они выполняли операции сложения и умножения комплексных чисел, а также оператор + так, чтобы он выполнял сложение комплексного числа с числом типа double справа и слева.
3, 6, 9, 12, 15, 18, 21, 24, 27, 30 Определить класс – комплексное число. В класс включить конструктор, задающий значение числа по передаваемым параметрам (действительной и мнимой части), функции, возвращающие действительную и мнимую части числа, перегрузить операторы + и *, чтобы они выполняли операции сложения и умножения комплексных чисел, а также оператор * так, чтобы он выполнял умножение комплексного числа на число типа double справа и слева.

 




Дата добавления: 2014-12-18; просмотров: 49 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав