Ознайомлення з функцією друга в C ++

Унікальною особливістю програми C ++ є те, що вона використовує інкапсуляцію для збереження обернутих даних разом із усіма своїми функціональними функціями для створення індивідуального об'єкта. Це гарантує, що до конкретних даних можна отримати доступ лише через завдання, що діють над ним, а не будь-яке інше завдання поза цим класом. Отже, у випадках, коли зовнішньому класу може знадобитися доступ до цих конкретних даних, ми використовуємо цю специфічну функцію, яку називають функцією «друг». Ми знаємо, що, використовуючи такі ключові слова, як "захищений" та "приватний", ми не можемо отримати доступ до цих даних поза його методом. Але задля застосування в режимі реального часу, існує багато випадків, коли нам можуть знадобитися однакові приватні / захищені дані, а використання вже оголошеного завжди є більш кращим, ніж створювати їх багато разів. Давайте подивимось, як оголосити та використовувати функцію Friend у C ++ у цій статті.

Функція друга під час декларування передує ключовому слову "друг", як показано тут:

Синтаксис :

class (
private
protected
friend (arguments list);
)
returnDatatype functionName(arguments list)(
//function from which protected and private keywords
//can be accessed from as this is a friend method of className
)
class (
private
protected
friend (arguments list);
)
returnDatatype functionName(arguments list)(
//function from which protected and private keywords
//can be accessed from as this is a friend method of className
)

Як показано у наведеному вище коді, функцію friend потрібно оголосити в тому ж класі, де було оголошено захищене або приватне ключове слово, щоб ці дані були доступні поза класом. Цю функцію дозволено оголошувати в будь-якій точці всієї програми, як звичайний метод C ++. Для визначення функції не потрібні такі ключові слова, як друзі або будь-які оператори з вирішення області.

Приклади функції друзів у програмі C ++

Давайте трохи краще перевіримо роботу функції друга, взявши кілька прикладів нижче.

Приклад №1

Код:

/* C++ program which exhibits the working of friend function.*/
#include
using namespace std;
class Weight
(
private:
int kilo;
public:
Weight(): kilo(0) ( )
//Declaration of a friend function
friend int addWeight(Weight);
);
// Defining a friend function
int addWeight(Weight w)
(
//accessing private data from non-member function
w.kilo += 17;
return w.kilo;
)
int main()
(
Weight W;
cout<<"Weight: "<< addWeight(W);
return 0;
)

Вихід:

Тут функцією friend є метод addWeight (), який оголошується у ваговому класі. Kilo - це приватне ключове слово, оголошене у методі Weight, до якого через нього можна отримати функцію addWeight. Цей приклад був лише для того, щоб продемонструвати основне використання функції друзів, хоча тут немає використання в режимі реального часу. Давайте тепер глибоко зануримось у деякі змістовні приклади.

Приклад №2

Код:

#include
using namespace std;
// Forward declaration
class SecondClass;
class FirstClass (
private:
int first_num;
public:
FirstClass(): first_num(12) ( )
// Declaring a friend function
friend int divide(FirstClass, SecondClass);
);
class SecondClass (
private:
int sec_num;
public:
SecondClass(): sec_num(4) ( )
// Another friend declaration
friend int divide(FirstClass, SecondClass);
);
// Function divide() is the friend function of classes FirstClass and SecondClass
// that accesses the member variables first_num and sec_num
int divide(FirstClass fnum, SecondClass snum)
(
return (fnum.first_num / snum.sec_num);
)
int main()
(
FirstClass fnum;
SecondClass snum;
cout<<"The value got by dividing first by second number: "<< divide(fnum, snum);
return 0;
)

Вихід:

У цьому прикладі обидва класи FirstClass і SecondClass мають розділення (), оголошені функцією friend. Отже, ця функція може отримати доступ до даних приватних змінних з обох класів. Тут функція поділу () використовується для додавання приватних змінних first_num та sec_num двох об'єктів fnum і snum і повертає своє значення основного методу.

Щоб це функціонувало належним чином, потрібно зробити попереднє оголошення для SecondClass, як показано в коді, тому що SecondClass посилається в FirstClass за допомогою програми:

friend int divide(FirstClass, SecondClass);

Дружний клас: Існує клас друзів так само, як функція друга. Друг-клас також може отримати доступ до приватних та захищених змінних класу, оскільки він є його другом.

Синтаксис :

class One(
friend class Two;
);
class Two(
);
class One(
friend class Two;
);
class Two(
);
class One(
friend class Two;
);
class Two(
);

Як показано вище, другий клас є другом першого класу. Отже, клас два може отримати доступ до приватних та захищених змінних першого класу. Але клас 1 не може отримати доступ до захищених або приватних змінних другого класу, оскільки це не взаємна дружба. Для взаємної дружби нам слід це чітко заявити. Таким же чином, ця дружба класу не успадковується, тобто другий клас не повинен бути другом підкласів першого класу, хоча він є другом першого класу.

Приклад №3

Код:

#include
#include
using namespace std;
class Perimeter(
int len, brd, perimeter, temp;
public:
Perimeter(int len, int brd):len(len), brd(brd)
()
void calcPerimeter()(
temp = len + brd;
perimeter = 2 * temp;
)
friend class printClass;
);
class printClass(
public:
void printPerimeter(Perimeter a)(
cout<<"Perimeter = "< )
);
int main()(
Perimeter a(10, 15);
a.calcPerimeter();
printClass p;
p.printPerimeter(a);
return 0;
)
#include
#include
using namespace std;
class Perimeter(
int len, brd, perimeter, temp;
public:
Perimeter(int len, int brd):len(len), brd(brd)
()
void calcPerimeter()(
temp = len + brd;
perimeter = 2 * temp;
)
friend class printClass;
);
class printClass(
public:
void printPerimeter(Perimeter a)(
cout<<"Perimeter = "< )
);
int main()(
Perimeter a(10, 15);
a.calcPerimeter();
printClass p;
p.printPerimeter(a);
return 0;
)

Вихід:

У цьому коді ми маємо 2 класи: Клас периметра, який знаходить периметр за допомогою значень довжини та ширини. Змінні len, brd, периметр і temp - це всі приватні змінні периметру класу. Тому нам потрібно зробити printClass другом класу Периметр. Цей printClass використовує значення Perimeter, обчислене у функції calcPerimeter () у класі Perimeter. Оскільки всі вони є приватними членами, ми повинні зробити printPerimeter другом класу Perimeter. Після цього ми повинні створити об’єкт у головному класі для обчислення периметра і передати цей об’єкт класу printPerimeter для відображення периметра.

Особливості функції друзів у C ++

  • Метод та клас, яким він оголошений як друг, не повинні бути однаковими.
  • Оскільки він не входить до сфери відповідного класу, його не можна викликати, використовуючи його об'єкт.
  • Його також можна назвати так само, як звичайний метод, навіть без використання об'єкта.
  • Він може отримати прямий доступ до імен учасників, лише використовуючи його ім'я об'єкта та крапковий оператор членства разом з його іменем.
  • Немає обмежень, оскільки це може бути оголошено як в приватній, так і в публічній частині.

Висновок

Враховуючи всі вищезгадані функції та приклади функції друга в C ++, слід також бути обережними, використовуючи функції друга з численними функціями та зовнішніми класами, оскільки це може зменшити важливість інкапсуляції різних класів в об'єктно-орієнтованому програмуванні. Отже, програмісту це може бути як користь, так і користь.

Рекомендована стаття

Це посібник щодо функції друзів на C ++. Тут ми обговорюємо функцію "Вступ до друга" в C ++ та її Приклади, а також реалізацію та виведення коду. Ви також можете ознайомитись із запропонованими нами статтями, щоб дізнатися більше -

  1. Рекурсивна функція в C ++ (приклади)
  2. Топ-11 особливостей C ++
  3. Машинне навчання C ++ Бібліотека
  4. Функція хешування в C з типами
  5. Функція хешування в PHP із синтаксисом