电视机与遥控器(友元类)

电视机与遥控器(友元类)

题目描述

有如下的电视类和遥控器类,遥控器在电视开机的情况下可以控制电视。
在这里插入图片描述

要求如下:

1.实现并完善Tv类;其中构造函数需修改和完善。另:最大频道为100;

2.将Remote设为Tv的友元类,以支持在Remote类中对Tv方法的调用。
加粗样式
3.在main函数中,通过Remote实例对TV实例进行操作。

输入

第一行,电视初始状态,依次为state,volume,channel,mode,input的初始值。

第二行,利用遥控器对上述状态的操作指令,用对应的函数名表示,如增加音量为volup

输出

第一行,执行遥控器操作后的状态。

示例输入

off 10 19 Cable VCR
onoff volup chanup set_mode set_input

示例输出

on 11 20 Antenna TV

#include<iostream>
#include<iomanip>
#include<cstring>
using namespace std;
class Remote;
class Tv
{
	public:
		Tv(int state1,int volume1,int channel1,int mode2,int input2)
		{
			state=state1;
			volume=volume1;
			channel=channel1;
			mode=mode2;
			input=input2;
		}
		void onoff();
		bool ison()const;	
		bool volup();
		bool voldown();
		void chanup();
		void chandown();
		void set_mode();
		void set_input();
		void settings()const;
		friend Remote;
	private:
		int state;//电视开关状态,on为1,off为0 
		int volume;//音量,取值范围从0-20 
		int maxchannel;//支持最大频道 
		int channel;//当前频道 
		int mode;//电视信号接受模式,Cable为1,Antenna为0 
		int input;//输入方式,VCR为1,TV为0 
};

void Tv::onoff()
{
	if(state==1)
	state=0;
	else
	state=1;
}

bool Tv::ison() const
{
	if(state==1)
	return true;
	else 
	return false;
}

bool Tv::volup()
{
	if(ison())
	{
		volume++;
		return true;
	}
	else
	return false;
} 

bool Tv::voldown()
{
	if(ison())
	{
		volume--;	
		return true;
	}
	else
	return false;
}
 
void Tv::chanup()
{
	if(ison())
	channel++;
}

void Tv::chandown()
{
	if(ison())
	channel--;
}

void Tv::set_mode()
{
	if(ison()&&mode==1)
	mode=0;
	else if(ison()&&mode==0)
	mode=1;
}

void Tv::set_input()
{
	if(ison()&&input==1)
	input=0;
	else if(ison()&&input==0)
	input=1;
}

void Tv::settings() const
{
	if(state==1)
	cout<<"on ";
	else if(state==0)
	cout<<"off ";
	cout<<volume<<" ";
	cout<<channel<<" ";
	if(mode==1)
	cout<<"Cable"<<" ";
	else if(mode==0)
	cout<<"Antenna"<<" ";
	if(input==1)
	cout<<"VCR"<<endl;
	else if(input==0)
	cout<<"TV"<<endl;
}

class Remote
{
	private:
		int mode;
	public:
		Remote(int m):mode(m){}
		bool volup(Tv &t){return t.volup();}
		bool voldown(Tv &t){return t.voldown();}
		void onoff(Tv &t){t.onoff();}
		void chanup(Tv &t){t.chanup();}
		void chandown(Tv &t){t.chandown();}
		void set_chan(Tv &t,int c){t.channel=c;}
		void set_mode(Tv &t){t.set_mode();}
		void set_input(Tv &t){t.set_input();}
};

int main()
{
	char state1[20],mode1[20],input1[20];
	int volume1,channel1,state2,mode2,input2;
	cin>>state1>>volume1>>channel1>>mode1>>input1;
	if(strcmp(state1,"off")==0)
	state2=0;
	else if(strcmp(state1,"on")==0)
	state2=1;
	if(strcmp(mode1,"Cable")==0)
	mode2=1;
	else if(strcmp(mode1,"Antenna")==0)
	mode2=0;
	if(strcmp(input1,"VCR")==0)
	input2=1;
	else if(strcmp(input1,"TV")==0)
	input2=0;
	Tv Tv1(state2,volume1,channel1,mode2,input2);
	char a[20];
	char ch;
	while(cin>>a)
		{
			Remote Remote1(mode2);
			if(strcmp(a,"onoff")==0)
			Remote1.onoff(Tv1);
			else if(strcmp(a,"volup")==0)
			Remote1.volup(Tv1);
			else if(strcmp(a,"voldown")==0)
			Remote1.voldown(Tv1);
			else if(strcmp(a,"chanup")==0)
			Remote1.chanup(Tv1);
			else if(strcmp(a,"chandown")==0)
			Remote1.chandown(Tv1);
			else if(strcmp(a,"set_chan")==0)
			Remote1.set_chan(Tv1,channel1);
			else if(strcmp(a,"set_mode")==0)
			Remote1.set_mode(Tv1);
			else if(strcmp(a,"set_input")==0)
			Remote1.set_input(Tv1);
			if(ch=getchar()=='\n')
			break;
		}
	Tv1.settings();
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值