C++ primer plus第6版中文版编程练习答案第15章.docx
- 文档编号:29796123
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:23
- 大小:18.70KB
C++ primer plus第6版中文版编程练习答案第15章.docx
《C++ primer plus第6版中文版编程练习答案第15章.docx》由会员分享,可在线阅读,更多相关《C++ primer plus第6版中文版编程练习答案第15章.docx(23页珍藏版)》请在冰豆网上搜索。
C++primerplus第6版中文版编程练习答案第15章
1、
//tv.h
#ifndefTV_H_
#defineTV_H_
#include
usingnamespacestd;
classTv
{
friendclassRemote;
public:
enum{Off,On};
enum{MinVal,MaxVal=20};
enum{Antenna,Cable};
enum{TV,DVD};
enum{USUAL,EXCHANGE};
Tv(ints=Off,intmc=125):
state(s),volume(5),
maxchannel(mc),channel
(2),mode(Cable),input(TV){}
~Tv(){}
voidonoff(){state=(state==On)?
Off:
On;}
boolison()const{returnstate==On;}
boolvolup();
boolvoldown();
voidchanup();
voidchandown();
voidset_mode(){mode=(mode==Antenna)?
Cable:
Antenna;}
voidset_input(){input=(input==TV)?
DVD:
TV;}
voidsettings()const;
voidset_rmode(Remote&r);
private:
intstate;
intvolume;
intmaxchannel;
intchannel;
intmode;
intinput;
};
classRemote
{
private:
friendclassTv;
enum{USUAL,EXCHANGE};
intmode;
intfmode;
public:
Remote(intm=Tv:
:
TV,intf=USUAL):
mode(m),fmode(f){}
boolvolup(Tv&t){returnt.volup();}
boolvoldown(Tv&t){returnt.voldown();}
voidonoff(Tv&t){t.onoff();}
voidchanup(Tv&t){t.chanup();}
voidchandown(Tv&t){t.chandown();}
voidset_chan(Tv&t,intc){t.channel=c;}
voidset_mode(Tv&t){t.set_mode();}
voidset_input(Tv&t){t.set_input();}
voidmode_show()const{cout<<"Remotepretentmodeis"< }; inlinevoidTv: : set_rmode(Remote&r) { if(ison()) { r.fmode=Remote: : EXCHANGE; r.mode_show(); } } #endif //tvfm.h #ifndefTVFM_H_ #defineTVFM_H_ #include usingnamespacestd; classTv; classRemote { public: enumState{Off,On}; enum{MinVal,MaxVal=20}; enum{Antenna,Cable}; enum{TV,DVD}; private: intmode; public: Remote(intm=TV): mode(m){} boolvolup(Tv&t); boolvoldown(Tv&t); voidonoff(Tv&t); voidchanup(Tv&t); voidchandown(Tv&t); voidset_chan(Tv&t,intc); voidset_mode(Tv&t); voidset_input(Tv&t); }; classTv { public: friendvoidRemote: : set_chan(Tv&t,intc); enumState{Off,On}; enum{MinVal,MaxVal=20}; enum{Antenna,Cable}; enum{TV,DVD}; Tv(ints=Off,intmc=125): state(s),volume(5), maxchannel(mc),channel (2),mode(Cable),input(TV){} ~Tv(){} voidonoff(){state=(state==On)? Off: On;} boolison()const{returnstate==On;} boolvolup(); boolvoldown(); voidchanup(); voidchandown(); voidset_mode(){mode=(mode==Antenna)? Cable: Antenna;} voidset_input(){input=(input==TV)? DVD: TV;} voidsettings()const; private: intstate; intvolume; intmaxchannel; intchannel; intmode; intinput; }; inlineboolRemote: : volup(Tv&t){returnt.volup();} inlineboolRemote: : voldown(Tv&t){returnt.voldown();} inlinevoidRemote: : onoff(Tv&t){t.onoff();} inlinevoidRemote: : chanup(Tv&t){t.chanup();} inlinevoidRemote: : chandown(Tv&t){t.chandown();} inlinevoidRemote: : set_chan(Tv&t,intc){t.channel=c;} inlinevoidRemote: : set_mode(Tv&t){t.set_mode();} inlinevoidRemote: : set_input(Tv&t){t.set_input();} #endif //tv.cpp #include"tv.h" //#include"tvfm.h" boolTv: : volup() { if(volume { volume++; returntrue; } else returnfalse; } boolTv: : voldown() { if(volume>MinVal) { volume--; returntrue; } else returnfalse; } voidTv: : chanup() { if(channel channel++; else channel=1; } voidTv: : chandown() { if(channel>1) channel--; else channel=maxchannel; } voidTv: : settings()const { cout<<"TVis"<<(state==Off? "Off": "On")< if(state==On) { cout<<"Volumesetting="< cout<<"Channelsetting="< cout<<"Mode="<<(mode==Antenna? "antenna": "cable")< cout<<"Input="<<(input==TV? "TV": "DVD")< } } //use_tv.cpp #include"tv.h" intmain() { Tvs42; Remotegrey; grey.mode_show(); cout<<"Initialsettingsfor42\"TV: \n"; s42.settings(); s42.onoff(); s42.chanup(); cout<<"\nAdjustedsettingsfor42\"TV: \n"; s42.settings(); s42.set_rmode(grey); grey.set_chan(s42,10); grey.volup(s42); grey.volup(s42); cout<<"\n42\"settingsafterusingremote: \n"; s42.settings(); Tvs58(Tv: : On); s58.set_mode(); grey.set_chan(s58,28); cout<<"\n58\"settings: \n"; s58.settings(); s58.set_rmode(grey); system("pause"); return0; } 2、 //exc_mean.h #ifndefEXC_MEAN_H_ #defineEXC_MEAN_H_ #include #include #include #include usingnamespacestd; classbad_hmean: publiclogic_error { private: stringname; public: explicitbad_hmean(conststring&n="hmean",conststring&s="Errorinhmean()\n"); stringmesg(); virtual~bad_hmean()throw(){} }; bad_hmean: : bad_hmean(conststring&n,conststring&s): name(n),logic_error(s) { } inlinestringbad_hmean: : mesg() { return"hmean()argumentsa=-bshouldbediva+b=0! \n"; } classbad_gmean: publiclogic_error { private: stringname; public: explicitbad_gmean(conststring&n="gmean",conststring&s="Erroringmean()\n"); stringmesg(); virtual~bad_gmean()throw(){} }; bad_gmean: : bad_gmean(conststring&n,conststring&s): name(n),logic_error(s) { } inlinestringbad_gmean: : mesg() { return"gmean()argumentsshouldbe>=0\n"; } #endif //error.cpp #include"exc_mean.h" doublehmean(doublea,doubleb); doublegmean(doublea,doubleb); intmain() { doublex,y,z; cout<<"Entertwonumbers: "; while(cin>>x>>y) { try{ z=hmean(x,y); cout<<"Harmonicmeanof"< <<"is"< cout<<"Geomettricmeanof"< <<"is"< cout<<"Enternextsetofnumbers "; } catch(bad_hmean&bg) { cout< cout<<"Errormessage: \n"< cout<<"Tryagain.\n"; continue; } catch(bad_gmean&hg) { cout< cout<<"Errormessage: \n"< cout<<"Sorry,youdon'tgettoplayandmore.\n"; break; } } cout<<"Bye! \n"; system("pause"); return0; } doublehmean(doublea,doubleb) { if(a==-b) throwbad_hmean(); return2.0*a*b/(a+b); } doublegmean(doublea,doubleb) { if(a<0||b<0) throwbad_gmean(); returnsqrt(a*b); } 3、 //exc_mean.h #ifndefEXC_MEAN_H_ #defineEXC_MEAN_H_ #include #include #include #include usingnamespacestd; classbad_hmean: publiclogic_error { private: stringname; public: doublev1; doublev2; explicitbad_hmean(doublea=0,doubleb=0, conststring&s="Errorinhmean()\n"); voidmesg(); virtual~bad_hmean()throw(){} }; bad_hmean: : bad_hmean(doublea,doubleb,conststring&s) : v1(a),v2(b),logic_error(s) { name="hmean"; } inlinevoidbad_hmean: : mesg() { cout< <<")argumentsa=-bshouldbediva+b=0! \n"; } classbad_gmean: publicbad_hmean { private: stringname; public: explicitbad_gmean(doublea=0,doubleb=0, conststring&s="Erroringmean()\n"); voidmesg(); virtual~bad_gmean()throw(){} }; bad_gmean: : bad_gmean(doublea,doubleb,conststring&s) : bad_hmean(a,b,s) { name="gmean"; } inlinevoidbad_gmean: : mesg() { cout< : v1<<","< : v2<<")argumentsshouldbe>=0\n"; } #endif //error.cpp #include"exc_mean.h" doublehmean(doublea,doubleb); doublegmean(doublea,doubleb); intmain() { doublex,y,z; cout<<"Entertwonumbers: "; while(cin>>x>>y) { try{ z=hmean(x,y); cout<<"Harmonicmeanof"< <<"is"< cout<<"Geomettricmeanof"< <<"is"< cout<<"Enternextsetofnumbers "; } catch(bad_gmean&hg) { cout< cout<<"Errormessage: \n"; hg.mesg(); cout< cout<<"Sorry,youdon'tgettoplayandmore.\n"; break; } catch(bad_hmean&bg) { cout< cout<<"Errormessage: \n"; bg.mesg(); cout< cout<<"Tryagain.\n"; continue; } } cout<<"Bye! \n"; system("pause"); return0; } doublehmean(doublea,doubleb) { if(a==-b) throwbad_hmean(); return2.0*a*b/(a+b); } doublegmean(doublea,doubleb) { if(a<0||b<0) throwbad_gmean(); returnsqrt(a*b); } 4、 //sales.h #ifndefSALES_H_ #defineSALES_H_ #include #include #include #include #include usingnamespacestd; classSales { public: enum{MONTHS=12}; classbad_index: publiclogic_error { private: intbi; public: explicitbad_index(intix,conststring&s="IndexerrorinSalesobject\n"); intbi_val()const{returnbi;} virtual~bad_index()throw(){} }; explicitSales(intyy=0); Sales(intyy,constdouble*gr,intn); virtual~Sales(){} intYear()const{returnyear;} virtualdoubleoperator[](inti)const; virtualdouble&operator[](inti); private: doublegross[MONTHS]; intyear; }; classLabeledSales: publicSales { public: classnbad_index: publicSales: : bad_index { private: std: : stringlbl; public: nbad_index(conststring&lb,intix, conststring&s="IndexerrorinLabeledSalesobject\n"); conststring&label_val()const{returnlbl;} virtual~nbad_index()throw(){} }; explicitLabeledSales(conststring&lb="none",intyy=0); LabeledSales(conststring&lb,intyy,constdouble*gr,intn); virtual~LabeledSales(){} constst
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ primer plus第6版中文版编程练习答案第15章 plus 中文版 编程 练习 答案 15