第十一章、友元

在 C++ 的语法中,友元(friend)是指让声明的一个函数、成员函数或类可以访问该类的私有和保护成员。

友元的作用

让全局函数、其他类的成员函数或其他类可以访问该类的私有和保护成员。

友元是一种通过关键 friend 来实现的声明。

关键字

friend

友元声明的分类

  1. 友元函数
  2. 友元成员函数
  3. 友元类

1. 友元函数

友元函数是指声明一个或多个全局函数作为该类的特殊函数,这些函数可以访问该类的私有或保护成员。

友元函数声明的语法

class 类名 {
   // 友元函数的声明语法
   friend 返回类型 函数名(形式参数列表);
};

示例

让全局函数 show_parent_info 成为 Children 类的友元函数,让其能够访问 Children 类的全部成员。

// filename: friend1.cpp
#include <iostream>
#include <string>

// 父亲类
class Parent {
    public:
        Parent(const std::string &n) :name(n), money(0) { }
    private:
        std::string name;
        int money;  // 钱数
    // 友元函数(声明 show_parent_info 可以访问本类成员)
    friend void show_parent_info(class Parent & prt);
};

// 全局函数,此函数会访问 Parent 类内的成员变量
void show_parent_info(class Parent & prt) {
    std::cout << prt.name << "有钱" << prt.money << "元\n";
}

int main(int argc, char * argv[]) {
    Parent p1("老张");
    show_parent_info(p1);
    return 0;
}

编译和运行结果如下:

weimz@mzstudio:~$ g++ -o friend1 friend1.cpp
weimz@mzstudio:~$ ./friend1
老张有钱0元