【C++】友元成员
类的特性之一就是封装,而友元就是C++为用户提供打破这种封装的手段,友元分为友元函数和友元对象
友元函数
- 友元函数,他只是一个函数,友元函数不是类的成员,通过类对象是无法访问的,但是在这个函数中有权通过对象访问类中的所有成员
- 友元函数,无论声明在类中的任何访问属性下都可以,不影响他的调用和访问
示例:
#include<iostream>
class node {
int id = 10;
friend void fun(node& n);
};
void fun(node& n) {
std::cout << n.id << std::endl;
}
int main() {
node n;
fun(n);//输出10
}
友元类
友元类是一个单独的类,只不过和友元函数一样,在类中声明了一个友元类,在这个友元类中同样也可以访问该类中的所有成员,在A类中声明B类为A类的友元类,那么在B类中就可以访问A类中的所有成员
示例:
#include<iostream>
class A {
friend class B;
int id = 10;
};
class B {
public:
void fun(A& a) {
std::cout << a.id << std::endl;
}
};
int main() {
A a;
B b;
b.fun(a);//输出10
}
友元的特性
- 单方向:B是A的朋友,B可以访问A的数据,A不可以访问B的数据
- 不传递:A是B的朋友,B是C的朋友,A和C没有朋友关系
- 不继承:A是B的朋友,B是C的父亲,A和C没有朋友关系