лекции программирование / polevoy_cpp_2012_spring_lecture_02
.pdfПерегрузка операторов (рекомендации)
•обеспечивайте полный набор перегруженных операторов
•минимизируйте количество
независимых операторов
пример:
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 |