Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
umm_3690.pdf
Скачиваний:
24
Добавлен:
30.04.2015
Размер:
364.53 Кб
Скачать

ется указатель 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]