
- •1В. Атрибуты private, public, protected
- •2В. Виртуальные методы и полиморфизм
- •7В. Заголовочные файлы.
- •8В. Инкапсуляция, наследование и полиморфизм
- •15В. Обработка исключений.
- •20В. Объект TextBox (или Edit).
- •27В. Перегрузка процедур и функций.
- •30В. Понятия объекта, класса объектов.
- •31В. Преимущества объектно-ориентированного программирования
- •43В. Функции-друзья
- •44В. Явное и неявное преобразование типов.
43В. Функции-друзья
Иногда удобно разрешить некоторым функциям доступ к закрытым членам класса. Механизм друзей позволяет классу разрешать доступ к своим неоткрытым членам.
Объявление друга начинается с ключевого слова friend и может встречаться только внутри определения класса. Так как друзья не являются членами класса, то не имеет значения, в какой секции они объявлены. В примере ниже мы сгруппировали все подобные объявления сразу после заголовка класса:
class Screen {
friend istream&
operator>>( istream&, Screen& );
friend ostream&
operator<<( ostream&, const Screen& );
public:
// ... оставшаяся часть класса Screen
};
Операторы ввода и вывода теперь могут напрямую обращаться к закрытым членам класса Screen. Простая реализация оператора вывода выглядит следующим образом:
#include
ostream& operator<<( ostream& os, const Screen& s )
{
// правильно: можно обращаться к _height, _width и _screen
os << "<" << s._height
<< "," << s._width << ">";
os << s._screen;
return os;
}
Другом может быть функция из пространства имен, функция-член другого класса или даже целый класс. В последнем случае всем его функциям-членам предоставляется доступ к неоткрытым членам класса, объявляющего дружественные отношения. (В разделе 15.2 друзья обсуждаются более подробно.)
44В. Явное и неявное преобразование типов.
В C++ различают явное и неявное преобразование типов данных. Неявное преобразование типов данных выполняет компилятор С++, ну а явное преобразование данных выполняет сам программист