Разделы презентаций


Лекция 5. Перегрузка операторов

Nortel Networks ConfidentialОператорные функцииМожно объявить функции для операторов:+, -, *, /, &, |, =, >,

Слайды и текст этой презентации

Слайд 1Лекция 5. Перегрузка операторов.
Артур Садеков

Лекция 5. Перегрузка операторов.Артур Садеков

Слайд 2Nortel Networks Confidential
Операторные функции
Можно объявить функции для операторов:
+, -, *,

/, &, |, =, >,

&&, ||, ++, --, [], (),
new, delete, и т.д.
Нельзя определить:
:: . .* ?: sizeof typedef
Невозможно определить новую лексему оператора
Имя операторной функции - operator@, например operator<< .

Nortel Networks ConfidentialОператорные функцииМожно объявить функции для операторов:+, -, *, /, &, |, =, >,

Слайд 3Nortel Networks Confidential
Бинарные операторы
Можно определить в виде:
нестатической функции-члена с одним

аргументом,
функции-не-члена с двумя аргументами.

Выражение aa@bb интерпретируется:
aa.operator@(bb)
operator@(aa, bb)



Nortel Networks ConfidentialБинарные операторыМожно определить в виде:нестатической функции-члена с одним аргументом,функции-не-члена с двумя аргументами.Выражение aa@bb интерпретируется:aa.operator@(bb)operator@(aa, bb)

Слайд 4Nortel Networks Confidential
Бинарные операторы. Примеры.
class Coord {
int x, y,

z;
public:
Coord operator+ (Coord);
Coord& operator= (Coord);
Coord& operator*= (int);
};
Coord

operator*(Coord, int);

Coord Coord::operator+(Coord t) {
Coord temp;
temp.x = x + t.x;
temp.y = y + t.y;
temp.z = z + t.z;
return temp;
}

Coord& Coord::operator=(Coord t) {
x = t.x;
y = t.y;
z = t.z;
return *this;
}

Coord operator*(Coord c,
int m) {
Coord temp = c;
return temp*=m;
}

Nortel Networks ConfidentialБинарные операторы. Примеры.class Coord { int x, y, z;public: Coord operator+ (Coord); Coord& operator= (Coord);

Слайд 5Nortel Networks Confidential
Операторы-члены и не-члены.
class Coord {
public:
Coord& operator+=(const Coord&);

//...
};
Coord operator+(const Coord&, const Coord&);
Coord& operator+=(const Coord& c)
{
x +=

c.x;
y += y.x;
z += z.x;
return *this;
}

Coord operator+(const Coord& c1, const Coord& c2)
{
Coord temp = c1;
return temp+=c2;
}

Nortel Networks ConfidentialОператоры-члены и не-члены.class Coord {public: Coord& operator+=(const Coord&); //...};Coord operator+(const Coord&, const Coord&);Coord& operator+=(const Coord&

Слайд 6Nortel Networks Confidential
Операторы-члены и не-члены.
class Coord {
public:
bool operator==(const Coord&

c) const;
//...
};

bool operator!=(const Coord& c1, const Coord& c2);
bool operator!=(const

Coord& c1, const Coord& c2)
{
return !(c1==c2);
}
Nortel Networks ConfidentialОператоры-члены и не-члены.class Coord {public: bool operator==(const Coord& c) const; //...};bool operator!=(const Coord& c1, const

Слайд 7Nortel Networks Confidential
Унарные операторы
Можно определить в виде:
нестатической функции-члена без аргументов,
функции-не-члена

с одним аргументом.

Выражение @aa интерпретируется как:
aa.operator@ ()
operator@ (aa)



Nortel Networks ConfidentialУнарные операторыМожно определить в виде:нестатической функции-члена без аргументов,функции-не-члена с одним аргументом.Выражение @aa интерпретируется как:aa.operator@ ()operator@

Слайд 8Nortel Networks Confidential
Унарные постфиксные операторы
Для любого постфиксного оператора выражение aa@

интерпретируется как:
aa.operator@ (int)
operator@ (aa, int)

Аргумент int используется для указания на

постфиксную форму
Аргумент является фиктивным

Nortel Networks ConfidentialУнарные постфиксные операторыДля любого постфиксного оператора выражение aa@ интерпретируется как:aa.operator@ (int)operator@ (aa, int)Аргумент int используется

Слайд 9Nortel Networks Confidential
Унарные операторы. Примеры.
class Coord {
int x, y,

z;
public:
Coord& operator- ();
Coord& operator++ ();
}
Coord& Coord::operator- () {

x = -x;
y = -y;
z = -z;
return *this;
}

Coord operator++(Coord& c, int i)
{
Coord temp = c;
++c;
return temp;
}

Coord& Coord::operator++() {
++x;
++y;
++z;
return *this;
}

Nortel Networks ConfidentialУнарные операторы. Примеры.class Coord { int x, y, z;public: Coord& operator- (); Coord& operator++ ();}Coord&

Слайд 10Nortel Networks Confidential
Предопределенный смысл операторов
Оператор может быть объявлен только с

синтаксисом, существующем для него в грамматике
operator=, operator[ ], operator-> должны

быть нестатическими функциями-членами
Некоторые операторы определены так, что они равны комбинации других операторов, например ++a означает a+=1 или a=a+1. Компилятор сам об этом не заботится.
Операторы = и & имеют предопределенный смысл для объектов класса, если они закрытые, этот смысл может стать недоступным.
Nortel Networks ConfidentialПредопределенный смысл операторовОператор может быть объявлен только с синтаксисом, существующем для него в грамматикеoperator=, operator[

Слайд 11Nortel Networks Confidential
Операторы и типы, определяемые пользователем
Операторная функция может быть

либо членом, либо иметь аргумент типа, определяемого пользователем.
Операторная функция, у

которой первый операнд принадлежит к встроенному типу, не может являться членом.

aa+2
aa.operator+(2)

2+aa
2.operator+(aa)

Nortel Networks ConfidentialОператоры и типы, определяемые пользователемОператорная функция может быть либо членом, либо иметь аргумент типа, определяемого

Слайд 12Nortel Networks Confidential
Конец

Nortel Networks ConfidentialКонец

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика