朋友可访问自己的东西,大概就这么个意思。即某类的友元类可访问该类的所有变量以及函数,或友元函数可以访问该类的变量以及函数,在朋友眼中没有任何隐藏,可谓时赤裸相对,肝胆相照,生生挚友。
注意:记得前置声明,不然很容易报错说没有定义声明;
友元函数:
cpp
// 【3】编写一个程序包含两个类,一个为Remotera类用来表示(万能)遥控器,一个为TV类用来表示电视机,要求遥控器能控制电视机,提供如下功能:
// ·电视机本身提供诸如setChannel(0、setVolume0等接口来修改频道和音量
// ·遥控器(万能)可控制电视机,但诸如开灯、降低空调温度等操作对电视机无效
#include <iostream>
#include <string.h>
using namespace std;
class TV;
class RemoteControl;
class RemoteControl
{
public:
void setVolume(TV &tv, int volume);
void setChannel(TV &tv, int channel);
};
class TV
{
public:
TV() {}
void show()
{
cout << "TV volume=" << volume << endl;
cout << "TV channel=" << channel << endl;
}
private:
friend void RemoteControl::setChannel(TV &tv, int channel); //友元函数
friend void RemoteControl::setVolume(TV &tv, int volume);
int volume;
int channel;
};
void RemoteControl::setVolume(TV &tv, int volume)
{
tv.volume = volume;
}
void RemoteControl::setChannel(TV &tv, int channel)
{
tv.channel = channel;
cout << "友元函数调用: "<< endl;
tv.show();
}
int main(int argc, char const *argv[])
{
TV tv;
RemoteControl rc;
rc.setVolume(tv, 10);
rc.setChannel(tv, 10);
tv.show();
return 0;
}

友元类:
cpp
// 练习:利用友元类的技术点,让两个类,互为友元,并访问对方的私有成员。遇到语法错误,思考如何解决?
#include <iostream>
#include <string.h>
using namespace std;
class A;
class B;
class A
{
public:
A(int a)
{
this->a = a;
}
void show_a(B &b);
private:
int a;
friend class B;
};
class B
{
public:
B(int b)
{
this->b = b;
}
void show_b(A &a);
private:
int b;
friend class A;
};
void B::show_b(A &a)
{
a = 10;
cout << "a=" << a.a << endl;
cout << "b=" << b << endl;
}
void A::show_a(B &b)
{
b = 20;
cout << "a=" << a << endl;
cout << "b=" << b.b << endl;
}
int main(int argc, char const *argv[])
{
A a(10);
B b(20);
a.show_a(b);
b.show_b(a);
return 0;
}