Nó giống như một hàm friend, nó chỉ là một lớp ở vị trí của hàm. Trong đó, một lớp là bạn của lớp khác hoặc lớp là bạn của
nhiều lớp học mà một lớp có thể truy cập các thành viên riêng của lớp khác,
đây là một ví dụ về hai hạng nhất và thứ hai là bạn bè nơi hạng hai có thể truy cập các thành viên tư nhân hạng nhất,
Nhưng có một số điều kiện, nếu hạng nhất là bạn của hạng hai, thì hạng nhất có thể tiếp cận thành viên riêng của hạng hai, nhưng hạng hai không thể tiếp cận thành viên của hạng nhất. Theo một cách nào đó, chúng ta có thể nói rằng tình bạn là một chiều.
Chúng ta hãy coi đây là sự trợ giúp của một chương trình-
Ở đây chương trình trên đã được đưa ra dưới dạng lớp bạn bè trong C ++, vì vậy bạn sẽ có thể hiểu nó một cách dễ dàng.
Trong sơ đồ dưới đây, chúng ta khai báo hai class First và class Second, trong đó chúng ta truy cập thành viên private class hạng nhất sử dụng đối tượng hạng nhất obj1 đến class thứ hai,
Đây là Chương trình,
#include<iostream>
#include<stdio.h>
using namespace std;
class First
{
int a;
friend class Second; //second is declaration in private mode of first class
public:
void get_num(int x)
{
a = x;
}
}; // first class terminate
class Second
{
int b;
public:
void get_num(int y)
{
b = y;
}
void get_sum( First obj1) // second class member defination
{
int sum;
sum = obj1.a + b; // accessing first class member using first class object f1
cout<<"Total: "<<sum;
}
}; // second class terminate
int main() // main function start here
{
int a,b;
first obj2; // first class object declare
second s; // second class object declare
cout<<"Enter two number: ";
cin>>a>>b;
obj2.get_num(a); // first class function call
s.get_num(b); // second class function call
s.get_sum(obj2); // friend function call
return 0;
}
RA
Enter two number: 3 8
Total: 11
Lời giải thích
Xem sơ đồ trên
một hàm Friend có thể kết bạn với nhiều lớp
Một hàm friend có thể là bạn của nhiều hơn một lớp trong C++. Trong tình huống như vậy, chúng tôi phải chuyển tiếp tuyên bố của lớp có bạn của nó.
Trong đó, cả hai tên lớp đều được khai báo là tham số của hàm friend trong khai báo hàm friend, ví dụ:
friend return-type function_name(first-class,second-class);
Trong khi đối tượng của các lớp đó cũng được khai báo trong định nghĩa của các hàm bạn bè này-
return-type function_name(first-class obj1, second-class ob2)
{
..............
..............
};
Trong cú pháp bên dưới, giống như hàm friend có thể khai báo cả private và public, vì vậy ở đây chúng ta đã khai báo hàm friend ở hạng nhất ở chế độ private và second class ở chế độ public.
class second; // forward declaration
class first
{
data member;
friend return type function_name(first, second); //private mode
public:
data member
member function;
};
class second
{
data member;
member function;
public:
data member;
member function;
friend return type function_name(first, second); // public mode
};
Hãy nhớ trong hai lớp, tên của hàm khai báo friend sẽ giống nhau trong khi khai báo ở bất cứ đâu (chế độ private hoặc public) giống như bên dưới trong đó void friend show_sum(first, second) là hàm friend type,
class second; // forward declaration
class first
{
int a;
void friend show_sum(first, second); // declared in private
public:
get_num(int x) {
statement;
}
};
class second
{
int b;
public:
void get_num(int y) {
statement;
}
void friend show_sum(first, second); // declared in public
};
Theo cú pháp này, chương trình của nó được đưa ra dưới đây-
#include<iostream>
#include<stdio.h>
using namespace std;
class second; // forward declaration
class first
{
int a;
void friend show_sum(first,second); // friend function declaration in private mode
public:
void get_num(int x)
{
a = x;
}
}; // first class terminate here
class second
{
int b;
public:
void get_num(int y)
{
b = y;
}
void friend show_sum(first,second); //friend declaration in public mode
}; // second terminate here
void show_sum(first obj1 , second obj2) // defination of friend function
{
int sum;
sum = obj1.a + obj2.b; // accessig private member of classes
cout<<"Total: "<<sum;
}
int main() // main function start here
{
int a,b;
clrscr();
first obj1;
second obj2;
cout<<"Enter two number: ";
cin>>a>>b;
obj1.get_num(a); // first class function call
obj2.get_num(b); // second class function call
show_sum(obj1,obj2); // friend function call
return 0;
}
RA
Enter two number: 5 6
Total: 11
Lời giải thích
Trong định nghĩa bên ngoài (bên ngoài lớp) của hàm FRIEND, toán tử phân giải phạm vi không được sử dụng, trong khi toán tử phân giải phạm vi của một thành viên công khai đơn giản được sử dụng trong định nghĩa bên ngoài.