C++笔记 - friend

98 阅读1分钟

friend关键字可以修饰普通函数类成员函数。被修饰的函数,可以访问类的私有保护成员变量。由于该关键字带来了很大的便利,但也破坏了类的封装性,所以对其使用进行了限制:

  • 友元关系不能继承。
  • 友元关系是单向的。
  • 友元关系不会传递。

友元函数

在类内声明,在类外定义。

#include <iostream>

class num {
    int m_a;

  public:
    num(int a) : m_a(a) {}

    friend void show_num(num &n);
};

void show_num(num &n) { std::cout << n.m_a << std::endl; }

int main(void) {
    num n{1};
    show_num(n); // 输出: 1
}

友元类

在类内声明,在类外定义。

#include <iostream>

class num {
    int m_a;

  public:
    num(int a) : m_a(a) {}
    
    friend class num_friend;
};

class num_friend {
    public:
        void show_num(num &n) { std::cout << n.m_a << std::endl; }
};

int main(void) {
    num n{1};
    num_friend nf;
    nf.show_num(n); // 输出: 1
}