电视机与遥控器(友元类)
题目描述
有如下的电视类和遥控器类,遥控器在电视开机的情况下可以控制电视。
要求如下:
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;
}