一. 友元
何时会用到友元呢?
当想让(类外面的某个函数/其它的类)访问 某个类里面的(私有或保护的)内容时,可以选择使用友元。
友元提供了一种突破(类访问限定符 封装)的方式,即在类外面也可以访问类里面的私有/保护成员。
友元的关键字:
friend
友元的声明通常位于类的声明中,但其实现则位于类外部。
- 友元分为2种:友元函数和友元类

友元函数是一种特殊的函数,且它的声明是在类的内部,但它并不是类的成员函数
还有一个注意点是,只有类的静态成员(静态成员变量/静态成员函数)才能直接用类名去访问。
-------------首先
静态成员属于整个类,所有对象共用一份;非静态成员(普通成员)属于具体的对象,每个对象都有自己独立的一份。
-------------原因
只有被 static 修饰的 静态成员(变量/函数),才能直接用「类名::」去访问(A::_a1);普通成员,绝对不能用类名访问,必须通过对象访问(对象.成员)。

class A
{
public:
A(int a1)
:_a1(3)
{
}
int _a1=1;
};
int main()
{
std::cout << A::_a1 << std::endl;
//这个是错误的,_a1只是普通成员,不可以用类名访问
A aa1(9);
std::cout << aa1._a1 << std::endl;
//这个是正确的
}

class A
{
public:
A(int a2)
{
}
static int _a1;
int _a2 = 9;
};
static int _a1 = 8;//static成员在全局初始化
int main()
{
//静态成员函数可以用类名去访问
std::cout << A::_a1 << std::endl;
}
"全局函数"作友元
(某个全局函数) 想要访问 (类A里的私有成员),直接访问的话,编译器会报错。
办法:我们可以告诉编译器,这个全局函数是类A的好朋友,它是可以访问类A的私有成员的,可以放心,不会出事儿。
措施:在类的内部声明,全局函数是友元
//类A

&spm=1001.2101.3001.5002&articleId=143504850&d=1&t=3&u=35f088efb9b841439abc3272a7db0676)
1万+

被折叠的 条评论
为什么被折叠?



