Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Перегрузка операторов.
Форма для перегрузки операторов: Объявление перегруженных операторов осуществляется так же, как и функций. Используется специальное слово: operator, за которым следует сам перегружаемый оператор. В функциях с одним операндом параметры не задаются Const класс & класс:: operator …(); Перегрузка оператора с двумя операндами требует наличия параметров (константные ссылки на объекты этих классов): Класс класс:: operator + (const класс & rhs) — заголовок и след. Описание Класс operator + (const класс &) Рекомендации: § перегружайте операторы. Если код программы после этого станет чётче и понятнее. § Возвращайте объекты класса из перегруженных операторов. § Не увлекайтесь созданием перегруженных операторов, выполняющих несвойственные им функции.
#include< iostream.h> Class V_3d { Double x, y, z; public: V_3d(const V_3d & v1); // конструктор -копировщик V_3d(double x1=0, double y1=0, double z1=0): // конструктор со значениями по умолчанию x(x1), y(y1), z(z1) {}; // инициация переменных-членов void print(); // печать объекта класса V_3d operator +(V_3d t); // перегрузка оператора + V_3d operator =(V_3d t); // перегрузка оператора = friend ostream & operator < < (ostream & stream, V_3d t); friend istream & operator > > (istream & stream, V_3d & t ); double mod(); // функция модуля }; V_3d:: V_3d(const V_3d & v1) { x=v1.x; y=v1.y; z=v1.z; } void V_3d:: print() { cout< < " x=" < < x< < " y=" < < y< < " z=" < < z< < " \n"; } V_3d V_3d:: operator +(V_3d t) { V_3d c; c.x=x+t.x; c.y=y+t.y; c.z=z+t.z; Return c; } V_3d V_3d:: operator =(V_3d t) { x=t.x; y=t.y; z=t.z; return *this; } ostream & operator < < (ostream & stream, V_3d t) { stream< < " x=" < < t.x< < ", "; stream< < " y=" < < t.y< < ", "; stream< < " z=" < < t.z< < " \n"; Return stream; } istream & operator > > (istream & stream, V_3d & t) { stream > > t.x> > t.y> > t.z; Return stream; } double V_3d:: mod() { return x*x+y*y+z*z; } Void main(void) { V_3d a; V_3d b(4, 7, 10); V_3d c(b); cout < < " координаты вектора b: \n"; cout < < b; cout < < " координаты вектора c: \n"; C.print(); cout < < " введите координаты вектора a: \n"; cin > > a; cout < < " координаты вектора а: \n"; cout < < a; c=a+b; cout < < " координаты вектора a+b \n"; C.print(); } Результат работы программы: координаты вектора b: x=4, y=7, z=10 координаты вектора c: x=4 y=7 z=10 введите координаты вектора a: -1 3 6 координаты вектора а: x=-1, y=3, z=6 координаты вектора a+b x=3 y=10 z=16
|