Class Person
{
int secret; // закрита частина класу
friend void Spouse(Person &); // не член класу
public:
Person(){ secret = 10;}
};
void Spouse(Person &p)
{
++p.secret;
cout << p.secret;
}
Void main()
{
Person ff;
Spouse(ff);
}
У даному прикладі функція Spouse() є звичайною функцією і не належить жодному класу. Цій функції передається посилання на об'єкт класу Person.
Приклад:
class monstr; // Попереднє оголошення класу
Class hero
{
public:
void kill(monstr &);
…
}
Class monstr
{
…
friend int steal_ammo(monstr &);
friend void hero:: kill(monstr &);
// Клас hero має бути визначений раніше
};
…
int steal_ammo(monstr &M){return --M.ammo;}
void hero::kill(monstr &M){M.health = 0; M.ammo = 0;}
У даному прикладі приведений опис двох функцій, дружніх класу monstr. Функція kill є методом класу hero, а функція steal_ammo не належить жодному класу.
Використання дружніх функцій потрібно по можливості уникати, оскільки вони порушують принцип інкапсуляції і, таким чином, ускладнюють відлагодження та модифікацію програми.
2.4.2 Дружній клас
Якщо всі методи якого-небудь класу повинні мати доступ до прихованих полів іншого, весь клас оголошується дружнім за допомогою ключового слова friend. У приведеному нижче прикладі клас mist оголошується дружнім класу hero:
Class hero
{
friend class mist;
};
Дата добавления: 2014-12-26; просмотров: 707;