- •ВВЕДЕНИЕ
- •КЛАССЫ
- •Описание объектов
- •Указатель this
- •Конструкторы
- •Конструктор копирования
- •Статические элементы класса
- •Статические методы
- •Дружественные функции и классы
- •Дружественные функции
- •Дружественный класс
- •Деструкторы
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Перегрузка операции приведения типа
- •НАСЛЕДОВАНИЕ
- •Ключи доступа
- •Простое наследование
- •Правила наследования методов
- •Абстрактные классы
- •ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ
- •Синтаксис исключений
- •Перехват исключений
- •Список исключений
- •Иерархии исключений
- •СТАНДАРТНАЯ БИБЛИОТЕКА
- •Форматирование данных
- •Флаги и форматирующие методы
- •Манипуляторы
- •Методы обмена с потоком
- •Файловые потоки
- •СТРОКИ
- •Операции
- •Функции
- •Преобразование строк
- •Поиск подстрок
- •Сравнение частей строк
- •Получение характеристик строк
- •КОНТЕЙНЕРНЫЕ КЛАССЫ
- •Последовательные контейнеры
- •Векторы
- •Двусторонние очереди
- •Списки
- •Ассоциативные контейнеры
- •Словари
- •Словари с дубликатами (multimap)
- •ПРИЛОЖЕНИЕ 1. ШАБЛОНЫ ФУНКЦИЙ
- •ПРИЛОЖЕНИЕ 2. ШАБЛОНЫ КЛАССОВ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
ется указатель this. Обращение к статическим методам производится так же, как и к статическим полям:
class A {
static int count;
public:
static void inc_count ( ) {count ++;}
…
};
…
A: :int count;
void f ( ) {
A a;
a.inc_count ( ); // A: :inc_count ( );
Статические методы не могут быть константными и виртуальными.
Дружественные функции и классы
Дружественные функции
Дружественные функции применяются для доступа к скрытым полям класса и представляют собой альтернативу методам. Метод, как правило, описывает свойство объекта, а в виде дружественных функций оформляются действия, не являющиеся свойствами класса, но концептуально входящие в его интерфейс и нуждающиеся в доступе к его скрытым полям.
Особенности дружественных функций:
–дружественная функция объявляется внутри класса с ключевым словом friend. В качестве параметра ей должен передаваться объект или ссылка на объект класса, поскольку указатель this ей не передается;
–дружественная функция может быть обычной функцией или методом другого ранее определенного класса. На нее не распространяется действие спецификаторов доступа; место размещения ее объявления в классе безразлично;
–одна функция может быть дружественной сразу нескольким классам.
Пример class monstr;
class hero {
public:
void rill (monstr &);
14
…
};
class monstr {
…
friend int steal_ammo (monstr &);
friend void hero: : kill (monstr &);
};
int steal_ammo (monstr &M) { return --ammo;}
void hero:: kill (monstr &M) {M.health=0; M.ammo=0;}
Пояснения
Функция kill является методом класса hero, а функция steal_ammo не принадлежит одному из классу.
Дружественный класс
Если все методы какого-либо класса должны иметь доступ к скрытым полям другого, весь класс объявляется дружественным с помощью ключевого слова friend.
class hero {
…
friend class mistress;
};
class mistress {
…
void f1 ( );
void f2 ( );
};
Функции f1 и f2 являются дружественными по отношению к классу hero.
!!! Объявление friend не является спецификатором доступа и не наследу-
ется.
15