Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лекции программирование / polevoy_cpp_2012_spring_lecture_02

.pdf
Скачиваний:
33
Добавлен:
20.04.2015
Размер:
101 Кб
Скачать
☆

Перегрузка операторов (рекомендации)

•обеспечивайте полный набор перегруженных операторов

•минимизируйте количество

независимых операторов

пример:

operator==

operator!= – реализовать через operator==

18.02.2012

cppNewb.ru

41

Смешанная арифметика

RatN val(0); /// rational number

2 + val;

val + 2;

требует наличия операторов

RatN operator+(const СRatN&, int);

RatN operator+(int, const СRatN&);

18.02.2012

cppNewb.ru

42

Потоковый ввод и вывод

Point center(0, 0);

cout << center;

приводит к вызову

operator<<(cout, center)

18.02.2012

cppNewb.ru

43

Классы ввода/вывода

•ostream

–поток вывода (класс)

–глобальные объекты cout, cerr, clog

•istream

–поток ввода (класс)

–глобальный объект cin

18.02.2012

cppNewb.ru

44

Проблема перегрузки операций ввода и вывода

•левым аргументом является экземпляр класса стандартной библиотеки

•модификация класса левого аргумента

невозможна или нежелательна

18.02.2012

cppNewb.ru

45

Перегрузка ввода/вывода

• вывод

ostream& operator<<(ostream&, T)

или

ostream& operator<<(ostream&, const T&)

• ввод

istream& operator>>(istream&, T&)

18.02.2012

cppNewb.ru

46

Оператор вывода (пример)

bool T::writeTxt(ostream& ostr);

ostream&

operator<<(ostream& ostr, T& rhs)

{

rhs.writeTxt(ostr); return ostr;

}

18.02.2012

cppNewb.ru

47

Друзья

•функция-член

–имеет доступ к закрытой части объявления

–находится в области видимости класса

–должна вызываться для экземпляров класса

(имеется указатель this)

•друг (friend-функция или friend-класс)

–имеет доступ к закрытой части объявления

18.02.2012

cppNewb.ru

48

Friend-функция

•указывается в объявлении класса, другом которого она является

•может указываться в любой секции

(public, protected, private)

18.02.2012

cppNewb.ru

49

Friend-функция (пример)

class CMatrix;

class CVector

{

friend CVec operator*(const CMatr&, const CVec&);

};

class CMatrix

{

friend CVec operator*(const CMatr&, const CVec&); };

CVec operator*(const CMatr& lhs, const CVec& rhs)

{

//…

}

18.02.2012

cppNewb.ru

50