Similar presentations:
Частные элементы и друзья. Лекция №15
1.
Лекция № 15Частные элементы и
друзья
2.
public, private, protectedpublic элементы доступны из вызывающей
программы.
private элементы закрыты из вызывающей
программы, но доступ к ним реализован через
методы класса.
protected элементы – закрыты в программе,
открыты производным классам (при наследовании).
3.
privateprivate элементы не позволяют
«испортить данные» класса.
Проверка и контроль реализована в методах класса.
Вызов методов – требует ресурсов.
Можно повысить производительность, позволяя
одному классу напрямую обращаться к частным
элементам другого.
4.
friendC++ позволяет определить класс в качестве друга
другого класса и разрешает классу-другу доступ к
частным элементам этого другого класса.
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.
Дружественный классКогда класс объявлен дружественным,
все его методы также становятся дружественными,
к тому классу в котором он объявлен.
Методы класса, который разрешил дружбу не имеют
доступа к элементам дружественного класса.
Не следует злоупотреблять и объявлять множество
дружественных классов.
Иногда целесообразней использовать
дружественные функции.