Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Операторы-функции




Операторы-функции используются для введения операций, связанных с символами:

+, -, *, /, %, ^, &, |, ~,!, =, <, >,+=, [ ], ->, (), new, delete.

Оператор-функция является членом класса или дружественной классу. Общая форма оператора-функции члена класса:

возвращаемый_тип имя_класса::operator#(список_аргум){

/*выполняемые действия */ }

После этого вместо operator#(a,b)можно писать a#b. Здесь символ # представляет один из введенных выше символов. В качестве примера можно привести операции >>, <<, перегружаемые для ввода-вывода. Отметим, что при перегрузке нельзя менять приоритет операторов и число операндов. Если оператор-функция, являющаяся членом класса перегружает бинарный оператор, у функции будет только один параметр-объект, находящийся справа от знака оператора. Объект слева вызывает оператор-функцию и передается неявно с помощью указателя this. Например:

// перегрузка +, = и ++ для класса coord. // пример 27

#include <iostream.h>

#include <conio.h>

class Coord {

int x, y; // значения координат

public:

Coord(int i=0, int j=0) { x = i; y = j; }

void getXY(int &i, int &j) { i = x; j = y; }

Coord operator+(Coord ob2);

Coord operator=(Coord ob2);

Coord operator++(); // префиксная форма

};

Coord Coord::operator+(Coord ob2) //перегрузка +

{ Coord temp;

temp.x = x + ob2.x; // temp.x=this->x+ob2.x

temp.y = y + ob2.y; // temp.y=this->y+ob2.y

return temp;

}

Coord Coord::operator=(Coord ob2) //перегрузка =

{ x = ob2.x; // this->x=ob2.x

y = ob2.y; // this->y=ob2.y

return *this;//возвращение объекта, которому присвоено значение

}

Coord Coord::operator++() //перегрузка ++, унарный оператор

{ x++; y++;

return *this;

}

int main(){

Coord o1(10, 10), o2(5, 3), o3;

int x, y;

o3 = o1 + o2; //сложение двух объектов. Вызов operator+()

o3.getXY(x, y);

cout << "(o1 + o2) X: " << x << ", Y: " << y << "\n";

o3 = o1; //присваивание объектов

o3.getXY(x, y);

cout << "(o3 = o1) X: " << x << ", Y: " << y << "\n";

++o1; //инкрементация объекта

o1.getXY(x, y);

cout << "(++o1) X: " << x << ", Y: " << y << "\n";

while(!kbhit());

return 0;

}

Результат:

(о1+о2) X:15,y:13

(о3=о1) X:10, y:10

(++o1) X:11, Y:11

При перегрузке унарного оператора ++ единственный параметр-объект передается через указатель this.

В следующем примере вводятся класс “множество” и операции && – пересечения, << – вывод множества.

#include <iostream.h> //пример 28

#include <conio.h>

class Set {

char *pl; //указатель на множество элементов типа char

public:

Set(char *pl)//конструктор

{pi=new char[strlen(pl)+1];strcpy(pi,pl);}//конструктор

Set &operator &&(Set &); //перегрузка &&-пересечение

friend ostream &operator<<(ostream &stream,Set &ob);//перегрузка<<

~Set(){delete [] pi;}//деструктор

};

Set& Set::operator &&(Set &s) // пересечение A=A^B

{int l=0;

for (int j=0;pi[j]!=0;j++)

for (int k=0;s.pi[k]!=0;k++)

if (pi[j]==s.pi[k]) {

pi[l]=pi[j];l++;break;}

pi[l]=0;

return *this;

}

ostream &operator<<(ostream &stream, Set &ob) {

stream << ob.pi << '\n'; /*перегрузка вывода */

return stream;

}

int main(){

Set s1("1f2bg5e6"),s2("abcdef");

Set s3=s2;

cout<<(s1&&s2)<<endl;//результат fbe

cout<<s3<<endl;//результат abcdef

while(!kbhit());

return 0;

}

 





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 431 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Самообман может довести до саморазрушения. © Неизвестно
==> читать все изречения...

2487 - | 2329 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.