friend函数:
1、类中函数前面加friend的函数;
2、该函数不属于任何对象,其实就是一个全部函数,但是这个全局函数仅仅作用于该类的对象。
3、该函数可以访问该类的私有成员变量,公有的更加不用说了。
具体我们看一个例子:
#include <cstring>
#include <stdio.h>
class Number {
public:
Number() = default;
Number(int x, int y) : m_x(x), m_y(y) {}
friend Number operator+(const Number &n1, const Number &n2) {
Number add;
add.m_x = n1.m_x + n2.m_x;
add.m_y = n1.m_y + n2.m_y;
return add;
}
friend void printNum(Number n) { printf("c:%d,%d\n", n.m_x, n.m_y); }
static void printNum2(Number n) { printf("c:%d,%d\n", n.m_x, n.m_y); }
public:
int m_x{0};
int m_y{0};
};
int main() {
Number a(10, 20);
Number b(30, 50);
Number c = a + b;
printNum(c);
Number::printNum2(c);
}
上面的例子主要展示了friend和static的区别,静态变量也是不属于任何类,也是一个类似于全局函数的函数,但是两者有本质区别,friend是为该类服务的,static是为全部对象服务的。