08-静态函数与友元
题目描述
有如下的电视类和遥控器类,遥控器在电视开机的情况下可以控制电视。
要求如下:
-
实现并完善Tv类;其中构造函数需修改和完善。另:最大频道为100;
-
将Remote设为Tv的友元类,以支持在Remote类中对Tv方法的调用。
-
在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>
using namespace std;
string State[2]={"off","on"};
string Mode[2]={"Cable","Antenna"};
string Input[2]={"VCR","TV"};
class tv
{
int state,volume,maxchannel,channel,mode,input;
public:
tv(int s,int mc,int vol,int ch,int m,int i)
{state=s;maxchannel=mc;volume=vol;channel=ch;mode=m;input=i;}
void onoff()
{
if(state==0)
state=1;
else
state=0;
}
int getstate()
{return state;}
bool ison()const
{
if(state==1)
return true;
else
return false;
}
bool volup()
{
if(volume<=19)
return volume++;
else
return volume;
}
int getvolme()
{return volume;}
bool voldown()
{
if(volume>=1)
return volume--;
else
return volume;
}
void chanup()
{
if(channel<100)
channel++;
}
void chandown()
{
if(channel>=1)
channel--;
}
int getchan()
{return channel;}
void setmode()
{
if(mode==0) mode=1;
else mode=0;
}
int getmode()
{return mode;}
void setinput()
{
if(input==0) input=1;
else input=0;
}
int getinput()
{return input;}
void settings()const
{
cout<<State[state];
cout<<" "<<volume<<" "<<channel<<" ";
cout<<Mode[mode]<<" "<<Input[input];
}
friend class remote;
};
class remote
{
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 setchan(tv &t,int c)
{t.channel=c;}
void setmode(tv &t)
{t.setmode();}
void setinput(tv &t)
{t.setinput();}
};
int main()
{
string state,mode,input;
int volume,channel;
int s,m,i;
cin>>state>>volume>>channel>>mode>>input;
if(state=="off") s=0;
else s=1;
if(mode=="Cable") m=0;
else m=1;
if(input=="VCR") i=0;
else i=1;
tv t(s,100,volume,channel,m,i);
remote r(m);
string command;
while(cin>>command)
{
if(command=="onoff")
r.onoff(t);
else if(command=="volup")
{
if(t.getstate()==1)
r.volup(t);
}
else if(command=="voldown")
{
if(t.getstate()==1)
r.voldown(t);
}
else if(command=="chanup")
{
if(t.getstate()==1)
r.chanup(t);
}
else if(command=="chandown")
{
if(t.getstate()==1)
r.chandown(t);
}
else if(command=="set_mode")
{
if(t.getstate()==1)
r.setmode(t);
}
else if(command=="set_input")
{
if(t.getstate()==1)
r.setinput(t);
}
}
t.settings();
return 0;
}