欢迎来到天天文库
浏览记录
ID:34816799
大小:176.23 KB
页数:46页
时间:2019-03-11
《chap14-inheritance_composition .pdf》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、14:Inheritance&CompositionOneofthemostcompellingfeaturesaboutC++iscodereuse.Buttoberevolutionary,youneedtobeabletodoalotmorethancopycodeandchangeit.613That’stheCapproach,andithasn’tworkedverywell.AswithmosteverythinginC++,thesolutionrevolvesaroundtheclass.Yo
2、ureusecodebycreatingnewclasses,butinsteadofcreatingthemfromscratch,youuseexistingclassesthatsomeoneelsehasbuiltanddebugged.Thetrickistousetheclasseswithoutsoilingtheexistingcode.Inthischapteryou’llseetwowaystoaccomplishthis.Thefirstisquitestraightforward:You
3、simplycreateobjectsofyourexistingclassinsidethenewclass.Thisiscalledcompositionbecausethenewclassiscomposedofobjectsofexistingclasses.Thesecondapproachissubtler.Youcreateanewclassasatypeofanexistingclass.Youliterallytaketheformoftheexistingclassandaddcodetoi
4、t,withoutmodifyingtheexistingclass.Thismagicalactiscalledinheritance,andmostoftheworkisdonebythecompiler.Inheritanceisoneofthecornerstonesofobject-orientedprogrammingandhasadditionalimplicationsthatwillbeexploredinChapter15.Itturnsoutthatmuchofthesyntaxandbe
5、havioraresimilarforbothcompositionandinheritance(whichmakessense;theyarebothwaysofmakingnewtypesfromexistingtypes).Inthischapter,you’lllearnaboutthesecodereusemechanisms.CompositionsyntaxActually,you’vebeenusingcompositionallalongtocreateclasses.You’vejustbe
6、encomposingclassesprimarilywithbuilt-intypes(andsometimesstrings).Itturnsouttobealmostaseasytousecompositionwithuser-definedtypes.Consideraclassthatisvaluableforsomereason://:C14:Useful.h//Aclasstoreuse#ifndefUSEFUL_H614ThinkinginC++www.BruceEckel.com#define
7、USEFUL_HclassX{inti;public:X(){i=0;}voidset(intii){i=ii;}intread()const{returni;}intpermute(){returni=i*47;}};#endif//USEFUL_H///:~Thedatamembersareprivateinthisclass,soit’scompletelysafetoembedanobjectoftypeXasapublicobjectinanewclass,whichmakestheinterface
8、straightforward://:C14:Composition.cpp//Reusecodewithcomposition#include"Useful.h"classY{inti;public:Xx;//EmbeddedobjectY(){i=0;}voidf(intii){i=ii;}intg()const{returni;}};intmain(){Yy;y.f(47);y.
此文档下载收益归作者所有