C中的运行时类型检查(RuntimetypecheckinC)

C中的运行时类型检查(RuntimetypecheckinC)

ID:46548940

大小:63.00 KB

页数:21页

时间:2019-11-25

C中的运行时类型检查(RuntimetypecheckinC)_第1页
C中的运行时类型检查(RuntimetypecheckinC)_第2页
C中的运行时类型检查(RuntimetypecheckinC)_第3页
C中的运行时类型检查(RuntimetypecheckinC)_第4页
C中的运行时类型检查(RuntimetypecheckinC)_第5页
资源描述:

《C中的运行时类型检查(RuntimetypecheckinC)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C卄中的运行时类型检查(RuntimetypecheckinC++)RuntimetypecheckinC++2009/09/2310:20,A.M.synopsisOftenpeopleask,〃howcanIdetermineorcheckthetypeofobjectinC++atruntime?"Thefollowingisademonstrationofasimpleproblem.Thefollowingprogramdisplays,zBark,zonthefirstcallofCFoo::z/AnimalSayszand〃Miaou〃onthesecondcall/z.Cl

2、assAnimal*/}{/*••;ClassDog:publicAnimal{/**/}・・;ClassCat:publicAnimalClassCFooPublic:VoidAnimalSays(Anima1*){/**/}・・・};Intmain(int,argc,char*,argv[])Dogrex;Catkitty;CFoofoo;Foo.AnimalSays(&rex);Foo.AnimalSays(&kitty);Return0;Thatis,youneedtodosomesortofmethodatruntimetodeterminethefunctionCFoo::the

3、argumentthatAnimalSaysaccepts,thepointertotheDogtypeobject,orthepointertotheCattypeobject・FirsttryOurfirstideawastoaddamembervariablethatstorestherelevantinformationaboutthetype・ttincludePublic:Enum,AnimalType,{TypeDog,TypeCat};};ClassDog:publicAnimal{Public:(Dog):m_type(TypeDog){}ConstAn

4、imalTypem_type;};ClassCat:publicAnimal{Public:(Cat):m_type(TypeCat){}};ClassCFooPublic:VoidAnimalSays(Anima1*);};Intmain(int,argc,char*,argv[]){Dogrex;Catkitty;CFoofoo;Foo.AnimalSays(&rex);Foo.AnimalSays(&kitty);Return0;VoidCFoo::AnimalSays(Animal*,pAnimal)If(((Dog*)pAnimal)->m_type二Animal::TypeDog

5、)Std::cout,,,Bark,/!z/:Elseif(((Cat*)pAnimal)->m_type二Animal::TypeCat)Std::cout,“Miaou”!〃;Now,lookingbackattheimplementationpartofCFoo::AnimalSays,imagineifwedon,thaveonlytwoanimaltypes,butmorethan50(ie,derivedclassesfromAnimal)?Asaresult,notonlyisthecodeveryugly,it'shardtomakesureit'snotwrong,it's

6、alsohardtoread,modify,andmaintain・That'snotagoodsolution.AnothergoodwaytodoitSavesclassnamesinstaticmembervariablesandaccessesthemthroughvirtualfunctions・ttincludettincludePublic:string&);string&);VirtualboolIsOfType(conststd::string&)二0;};ClassDog:publicAnimal{Staticconststringm_

7、class_name;Public:VirtualboolIsOfType(conststd::};ClassCat:publicAnimal{Staticconststringm_class_name;Public:VirtualboolIsOfType(conststd::};ClassCFooPublic:VoidAnimalSays(Anima1*);};Intmain(int,argc,char*,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。