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

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

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

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

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

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

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

пример:

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