C++ Friend友元函数

本文概述

  • C ++中的友元函数声明
  • C ++友元函数示例
如果将函数定义为C ++中的友元函数, 则可以使用该函数访问类的受保护数据和私有数据。
通过使用关键字Friend Compiler可以知道给定的函数是友元函数。
为了访问数据, 应该在类的主体内(以关键字friend为开头)声明friend函数。
C ++中的友元函数声明
class class_name { friend data_type function_name(argument/s); // syntax of friend function. };

在上面的声明中, friend函数的前面是关键字friend。可以像常规C ++函数一样在程序中的任何位置定义函数。函数定义不使用关键字friend或作用域解析运算符。
友元函数的特点:
  • 该函数不在已声明为友元的类的范围内。
  • 不能使用该对象来调用它, 因为它不在该类的范围内。
  • 可以像普通函数一样调用它, 而无需使用该对象。
  • 它不能直接访问成员名称, 而必须使用对象名称和点成员运算符作为成员名称。
  • 可以在私有或公共部分中声明它。
C ++友元函数示例让我们看一下用于打印盒子长度的C ++友元函数的简单示例。
#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; }

输出:
Length of box: 10

让我们看一个简单的示例, 该函数对两个类友好。
#include < iostream> using namespace std; class B; // forward declarartion. 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; }

输出:
10

在上面的示例中, min()函数对两个类友好, 即min()函数可以访问类A和B的私有成员。
C ++友元类
友元类可以访问已声明为友元的类的私有成员和受保护成员。
让我们看一个友元类的简单例子。
#include < iostream> using namespace std; class A { int x =5; friend class B; // friend class. }; class B { public: void display(A & a) { cout< < "value of x is : "< < a.x; } }; int main() { A a; B b; b.display(a); return 0; }

输出:
value of x is : 5

【C++ Friend友元函数】在上面的示例中, 类B被声明为类A内的友元。因此, B是类A的友元。类B可以访问类A的私有成员。

    推荐阅读