friend 注意事项

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
}

如果觉得有帮助,可以扫描右边的微信打赏码支持一下.

Leave a Reply

Your email address will not be published. Required fields are marked *