C++ 友元
我们知道,C++引进了三个关键字:private、protected、public来作为访问说明符。private修饰的成员只能被成员函数访问,而在类外,任何人都不能访问;public修饰的成员可以被所有人访问。
有没有一种机制,实现一种折中的选择,使得类里面的私有成员,只能让类外的部分函数访问,而不是全部呢?C++ 为了解决这个问题,引入了友元这个概念。
可以这样理解:如果不是friend的话,程序员就不能从类外“破门而入”,进而看到并不是想让所有人都看到的东西。
全局函数,另一个类中的成员函数,甚至整个类都可以声明为某一个类的friend。
类控制着哪些代码可以访问它的成员。声明友元就是其中的一种控制。
#include <iostream>
using namespace std;
class B;
class C
{
public:
void print();
};
class A
{
private:
int i;
public:
A(int j=1):i(j){}
friend void print(); //global function
friend class B;
friend void C::print();
};
void C::print()
{
A a;
cout<<"friend C.print() is visiting"<<a.i<<endl;
}
class B
{
private:
A a;
public:
void print()
{
cout<<"friend B is visiting"<<a.i<<endl;
}
};
void print()
{
A a;
cout<<a.i<<endl;
}
int main()
{
print(); //gloabl
B b;
b.print();
C c;
c.print();
return 0;
}
输出:

可以发现,从类外是看不出哪个函数或类是哪个类的友元,要找A类的友元,只能从A类的成员声明中去寻找原型。

浙公网安备 33010602011771号