Объектно-ориентированное программирование. Сивохин А.В - 39 стр.

UptoLike

39
Дружественные функции
Дружественной функцией называется функция, которая сама не является
элементом класса, но имеет права на доступ к элементам класса, описанным как
private или protected. Для описания дружественной функции используется
ключевое слово friend. Спецификаторы доступа для дружественных функций не
используются.
Можно объявить все функции одного класса дружественными для другого
класса
.
Пример:
class Y; //предварительное, неполное описание Y
class X { friend Y; // Все функции Y дружественны для X
int i;
void member_func (void);};
class Y { void friend_x1 ( X & );
void friend_x2 ( X * );}; // полное описание Y
Отношение дружественности наследуется, но не является транзитивным: если
X дружественно Y, Y дружественно Z, то не обязательно, что X дружественно Z.
Статические элементы класса
Для описания статических элементов класса используется ключевое слово
static.
Для нестатических элементов-данных
их копия существует для каждого
объекта класса. Для статических элементов-данных такая копия только одна, и
доступ к ней осуществляется без конкретной ссылки на объект класса. Более того, в
программе может быть не создано ни одного объекта указанного класса, тем не
менее статические элементы класса будут существовать и могут использоваться.
Назначение
статических элементов-данных класса: подсчет количества созданных
объектов конкретного класса, передача сообщений всем объектам класса, учет
использованных ресурсов и т.д.
Нестатические элементы-функции класса ассоциируются с конкретным
объектом, поэтому при доступе к элементам-данным в таких функциях имя объекта
или вовсе не указывается, или заменяется словом this. В статические
элементы-
функции объект необходимо передавать как параметр и указывать его имя при
доступе к нестатическим элементам-данным.
                                                                                39
                           Дружественные функции
    Дружественной функцией называется функция, которая сама не является
элементом класса, но имеет права на доступ к элементам класса, описанным как
private или protected. Для описания дружественной функции используется
ключевое слово friend. Спецификаторы доступа для дружественных функций не
используются.
    Можно объявить все функции одного класса дружественными для другого
класса.
    Пример:
    class Y; //предварительное, неполное описание Y
    class X { friend Y; // Все функции Y дружественны для X
          int i;
          void member_func (void);};
    class Y { void friend_x1 ( X & );
          void friend_x2 ( X * );}; // полное описание Y

    Отношение дружественности наследуется, но не является транзитивным: если
X дружественно Y, Y дружественно Z, то не обязательно, что X дружественно Z.

                         Статические элементы класса
     Для описания статических элементов класса используется ключевое слово
static.
     Для нестатических элементов-данных их копия существует для каждого
объекта класса. Для статических элементов-данных такая копия только одна, и
доступ к ней осуществляется без конкретной ссылки на объект класса. Более того, в
программе может быть не создано ни одного объекта указанного класса, тем не
менее статические элементы класса будут существовать и могут использоваться.
Назначение статических элементов-данных класса: подсчет количества созданных
объектов конкретного класса, передача сообщений всем объектам класса, учет
использованных ресурсов и т.д.
     Нестатические элементы-функции класса ассоциируются с конкретным
объектом, поэтому при доступе к элементам-данным в таких функциях имя объекта
или вовсе не указывается, или заменяется словом this. В статические элементы-
функции объект необходимо передавать как параметр и указывать его имя при
доступе к нестатическим элементам-данным.