C++友元类、友元函数

友元类、友元函数

可以将一个类设为另一个类的友元类,比如类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;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纯洁码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值