380.50K
Category: programmingprogramming

Частные элементы и друзья. Лекция №15

1.

Лекция № 15
Частные элементы и
друзья

2.

public, private, protected
public элементы доступны из вызывающей
программы.
private элементы закрыты из вызывающей
программы, но доступ к ним реализован через
методы класса.
protected элементы – закрыты в программе,
открыты производным классам (при наследовании).

3.

private
private элементы не позволяют
«испортить данные» класса.
Проверка и контроль реализована в методах класса.
Вызов методов – требует ресурсов.
Можно повысить производительность, позволяя
одному классу напрямую обращаться к частным
элементам другого.

4.

friend
C++ позволяет определить класс в качестве друга
другого класса и разрешает классу-другу доступ к
частным элементам этого другого класса.
friend
Класс_А
public
private
Класс_B

5.

Класс и класс-друг
class librarian; // Заранее объявляем дружественный класс
class book
{
public:
book (char *, char *, int);
void show_book(void);
friend class librarian; // Указываем дружественный класс
private:
char title [64] ;
char author[64];
int catalog;
};
class librarian // Дружественный класс
{
public:
librarian(char *);
void show_librarian(void);
void change_catalog(book *, int); // Обращение к book
private:
char fio [64] ;
};

6.

Дружественный класс
Дружественный класс объявляется заранее,
если он описан ниже определения класса,
который предоставляет дружбу.
friend class librarian;
Внутри класса указываем дружественный класс.
В дружественном классе объявляем методы,
которые будут иметь доступ к private части.

7.

Пример программы (1)

8.

Пример программы (2)

9.

Дружественный класс
Чтобы объявить класс дружественным,
в теле класса, который предоставляет дружбу,
перед именем дружественного класса
используем friend.
Нет разницы, в каком поле класса
объявляется дружественный класс
private, public или protected.
Всё равно будет обращение к его методам
из главной функции main().

10.

Друзья и защищенные элементы
protected элементы, позволяют производным
классам обращаться к защищенным элементам
базового класса напрямую, через оператор точка.
К защищенным элементам класса могут обращаться
классы, которые наследуют элементы базового
класса.
Классы-друзья C++ обычно не связаны между собой
узами наследования. Единственный способ информирование компилятора зарезервированным
словом friend.

11.

Ограничение друзей
Чем больше доступа к частным данным класса,
тем больше шансов на внесение ошибок.
C++ позволяет указать, определенные функции
дружественного класса,
которые будут иметь доступ к частным элементам.
class book
{
public:
book (char *, char *, int);
void show_book(void);
// Указываем дружественные методы
friend void librarian::show_librarian(void);
friend void librarian::change_catalog(book *B, int C);
private:
char title [64] ;
char author[64];
int catalog;
};

12.

Дружественные функции
Для объявления дружественной функции
указывается ключевое слово friend, за которым
следует полный прототип
friend void librarian::show_librarian(void);
Если ваша программа начинает ссылаться на один
класс из другого, вы можете получить синтаксические
ошибки, если порядок определения классов неверен.
Можно сообщить компилятору,
о существовании класса и позже определить его.
class book; // предварительное объявление

13.

Пример программы (1)

14.

Пример программы (2)

15.

Дружественный класс
Когда класс объявлен дружественным,
все его методы также становятся дружественными,
к тому классу в котором он объявлен.
Методы класса, который разрешил дружбу не имеют
доступа к элементам дружественного класса.
Не следует злоупотреблять и объявлять множество
дружественных классов.
Иногда целесообразней использовать
дружественные функции.
English     Русский Rules