C++primer plus第六版课后编程题答案15.1

来源:互联网 发布:杰克琼斯淘宝客服 编辑:程序博客网 时间:2024/06/05 00:20

tv.h

#ifndef TV_h_#define TV_h_#include <iostream>using namespace std;class Remote;class Tv{private:int state;int volume;int maxchannel;int channel;int mode;int input;public:friend class Remote;enum{Off,On};enum {MinVal,MaxVal=20};enum{Antenna,Cable};enum {TV,DVD};Tv(int s=Off,int mc=125):state(s),volume(5),maxchannel(mc),channel(2),mode(Cable),input(TV){};void onoff(){state=(state==On)?Off:On;};bool ison(){return state==On;};bool volup();bool voldown();void chanup();void chandown();void set_mode(){mode=(mode==Antenna)?Cable:Antenna;};void set_input(){input=(input==TV)?DVD:TV;//这是个什么情况???};void setting()const;void setR(Remote &r);//这里不能有方法的定义,否则会导致前置声明的混乱而无法编译};class Remote{friend class Tv;private:int mode;int RemoteMode;//用于描述遥控器的模式enum{RemoteOn,RemoteOff};public:Remote(int m=Tv::TV,int rm=RemoteOn):mode(m){};//构造函数多了一个bool volup(Tv &t){return t.volup();};bool vodown(Tv &t){ return t.voldown();};void onoff(Tv &t){return 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();};void show(){cout<<"RemoteMode:"<<(RemoteMode==RemoteOn?"RemoteOn":"RemoteOff")<<endl;}void change(){RemoteMode=RemoteOn?RemoteOff:RemoteOn;//用于Tv类切换}};#endif

tv.cpp

#include "tv.h"#include <iostream>using namespace std;//tvbool Tv::volup(){if(volume<MaxVal){volume++;return true;}elsereturn false;}bool Tv::voldown(){if(volume>MinVal){volume--;return true;}elsereturn false;}void Tv::chanup(){if(channel<maxchannel)channel++;elsechannel=1;}void Tv::chandown(){if(channel>1)channel--;elsechannel=maxchannel;}void Tv::setting()const{cout<<"Tv is "<<(state==Off?"off":"on")<<endl;if(state==On){cout<<"Volume setting="<<volume<<endl;cout<<"Channel setting="<<channel<<endl;cout<<"Mode="<<(mode==Antenna?"antenna":"cable")<<endl;cout<<"Input="<<(input==TV?"Tv":"DVD")<<endl;}}void Tv::setR(Remote &r){if(state==On)r.change();elsecout<<"Tv is not on!"<<endl;}

main151.cpp

#include "tv.h"#include <iostream>using namespace std;void main151(){/*Tv t;cout<<"Initial setting for t"<<endl;t.setting();t.onoff();t.chanup();cout<<"\nAdjusted settings for t"<<endl;t.setting();t.chanup();cout<<"Adjusted setting for t"<<endl;t.setting();*/Remote grey;/*grey.set_chan(t,10);grey.volup(t);grey.volup(t);cout<<"t \"settings after using remote:"<<endl;t.setting();*/Tv t11(Tv::On);t11.setting();grey.set_chan(t11,28);cout<<"t11 settings "<<endl;t11.setting();grey.show();t11.setR(grey);grey.show();}


0 0