友元类、友元函数
可以将一个类设为另一个类的友元类,比如类A设为类B的友元类;这时类A的成员函数可以访问类B所有的数据成员,包括私有部分,但是反过来则不行,因为类B并不是类A的友元类;友元函数和友元类的实现方式一样
友元函数或者友元类的声明可以放在public或者private和protected部分,效果都是一样的
//空调类
class AirCondition
{
public:
AirCondition():m_ON_OFF(OFF),m_Temperature(0),m_Mode(ECOOL){}
~AirCondition(){}
//将遥控器类设置为空调类的友元类
friend class RemoteControl;
//将show设为类的友元函数
friend void show(const AirCondition &ac);
private:
enum EMode
{
ECOOL = 0, //制冷
EHOT, //制热
};
enum EON_OFF
{
ON = 0, //开
OFF, //关
};
enum ETEMPERATURE
{
MIN = 5, //最低温度
MAX = 30, //最高温度
};
private:
EON_OFF m_ON_OFF;//开关
int m_Temperature;//温度
EMode m_Mode;//模式(制冷、制热)
};
//遥控器类
class RemoteControl
{
public:
RemoteControl(){}
~RemoteControl(){}
//设置空调模式
void mode(int mode, AirCondition &ac)
{
ac.m_Mode = (AirCondition::EMode)mode;
}
//开关
void on_off(AirCondition &ac)
{
ac.m_ON_OFF = (ac.m_ON_OFF == ac.ON ? ac.OFF:ac.ON);
}
//增加温度
void setAddTemperature(AirCondition &ac)
{
if (ac.m_Temperature < ac.MAX)
{
ac.m_Temperature++;
}
}
//减小温度
void setReduceTemperature(AirCondition &ac)
{
if (ac.m_Temperature > ac.MIN)
{
ac.m_Temperature--;
}
}
};
//空调类的友元函数
void show(const AirCondition &ac)
{
switch (ac.m_ON_OFF)
{
case ac.OFF:
{
cout<<"电源状态:关闭"<<endl;
}break;
case ac.ON:
{
cout<<"电源状态:开启"<<endl;
}break;
}
switch (ac.m_Mode)
{
case ac.ECOOL:
{
cout<<"当前模式:制冷"<<endl;
}break;
case ac.EHOT:
{
cout<<"当前模式:制热"<<endl;
}break;
}
cout<<"当前温度:"<<ac.m_Temperature<<endl;
}
int main()
{
AirCondition Ac;
show(Ac);
cout<<endl;
RemoteControl Rc;
Rc.mode(1, Ac);
Rc.on_off(Ac);
Rc.setAddTemperature(Ac);
show(Ac);
return 0;
}