In the dynamic realm of programming, C++ stands tall as a versatile language, continually sought after by professionals ranging from software developers to game designers and backend engineers. Holding a reliable reputation, C++ boasts a rich feature set, including the intriguing concept of friend functions. In C++, a friend function is a unique entity defined outside the class’s boundaries yet bestowed with the remarkable authority to access both protected and private members of the class it befriends. Despite not being a member function itself, the prototype of a friend function finds its home within the class declaration, showcasing the language’s elegance and flexibility.
This capability isn’t limited solely to classes; it expands its scope to encompass class templates, function templates, and even standard functions and member functions, affirming its status as a potent asset in the toolkit of C++ developers. The TIOBE index of 2022 underscores C++’s prominence as the fourth most widely used language worldwide, underscoring its enduring significance and broad acceptance in the constantly evolving realm of technology.
In C++, the friend function is declared outside the class’s scope, granting it access to both protected and private members of the class. While not a member function, the prototypes for friend functions are specified within the class declaration. This encompasses class templates, classes, function templates, functions, and member functions, allowing the friend function to access all members of the class.
The friend class offers various advantages and applications. Some key scenarios include:
In C++, friend functions come in the following variations:
The syntax for implementing a friend class is as follows:
class ClassB;
class ClassA {
// ClassB is a friend class of ClassA
friend class ClassB;
… .. …
}
class ClassB {
… .. …
}
As evident from the syntax, simply prepend the keyword ‘friend’ before a class to designate it as a friend class. Employing this syntax will establish ClassB as a friend class of ClassA. As ClassB assumes the role of a friend class, it gains access to all public, private, and protected members of ClassA. Conversely, the reverse is not applicable. This is because C++ permits only the granting of the friend relationship, not its reciprocation. Consequently, ClassA won’t be able to access the private members of ClassB.
Let’s see the simple example of the C++ friend function used to print the length of a box.
#include <iostream>
using namespace std;
class Box
{
private:
int length;
public:
Box(): length(0) { }
friend int printLength(Box); //friend function
};
int printLength(Box b)
{
b.length += 10;
return b.length;
}
int main()
{
Box b;
cout<<“Length of box: “<< printLength(b)<<endl;
return 0;
}
Output:
Length of box: 10
Let’s see a simple example when the function is friendly to two classes.
#include <iostream>
using namespace std;
class B; // forward declaration.
class A
{
int x;
public:
void setdata(int i)
{
x=i;
}
friend void min(A,B); // friend function.
};
class B
{
int y;
public:
void setdata(int i)
{
y=i;
}
friend void min(A,B); // friend function
};
void min(A a,B b)
{
if(a.x<=b.y)
std::cout << a.x << std::endl;
else
std::cout << b.y << std::endl;
}
int main()
{
A a;
B b;
a.setdata(10);
b.setdata(20);
min(a,b);
return 0;
}
Output:
10
In the above example, min() function is friendly to two classes, i.e., the min() function can access the private members of both classes A and B.
The friend function in C++ serves as a powerful tool for breaking the encapsulation barrier, allowing non-member functions special access to private and protected members of a class. Its flexibility enables intricate relationships between classes, enhancing the versatility of C++ programming. As you explore the world of software development further, contemplate broadening your skill set through an Advanced Certification Program in Data Science & Analytics. Arm yourself with the essential skills and knowledge required to thrive in this ever-evolving domain, opening doors to a fulfilling career in data-driven innovation. Seize the opportunity to advance your proficiency in data science and analytics today!
Book a free counselling session
Get a personalized career roadmap
Get tailored program recommendations
Explore industry trends and job opportunities
Programs tailored for your Success
Popular
Data Science
Technology
Finance
Management
Future Tech
© 2024 Hero Vired. All rights reserved