C﹢﹢数据类型转换方法及其应用.pdf

C﹢﹢数据类型转换方法及其应用.pdf

ID:52473150

大小:125.02 KB

页数:2页

时间:2020-03-28

C﹢﹢数据类型转换方法及其应用.pdf_第1页
C﹢﹢数据类型转换方法及其应用.pdf_第2页
资源描述:

《C﹢﹢数据类型转换方法及其应用.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C++数据类型转换方法及其应用侯勇(河南经贸职业学院,河南郑州450053)[摘要]基于c++的面向对象程序设计时,类型转换方法多样。探讨了smfic_cast、dynamic_cast、const_cast与reinterpret_cast这四种转换方法的应用场景和注意事项,可以作为实际开发的参考。[关键词]c++;类型转换;向上类型转换I.引言结构化程序设计理念中,将频繁使用逻辑独寺的代码封装成函数形式;面向对象的程序设计理念,讲究对象之间彼此传递消息。无论哪种程序设计,都势必涉及到参数传递问题。对于函数体内部,当接收到某个类型的参数之后,往往需要将参数的类型进行转换以适应当前逻辑的

2、要求。为此,探讨数据类型转换的方法和应用场景就湿得I。分必要。作为c++语言的前身,C语言中,对数据类型转换并不十分严格,特别对丁.指针类犁的数据对象,可以将其强制类型转换为任意类型的指针,这也存在潜在的风险。作为强类型语言,c++为程序开发者提供四种类型的数据转换方式:static_cast、dynamic_east、const_cast与reinterpret_cast。本文的主要目的是探讨四种转换方式的适用场景和针对的问题。2.staric_caststaticcast的府用场景主要分为4类:(1)用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换

3、成基类表示)是安伞的;进行下行转换(把基类指针或引J

4、j转换成子类表示)时,由于没有动态类型枪查,所以是不安全的。(2)用1:基奉数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要由开发人员来保证。(3)把窄指针转换成目标类型的空指针。(4)把任何类型的表达式转换成void类型。最需要注意的是第一条,用于子类指针向父类指针的转换。在面向对象程序设计过程中,通常采用增最式开发的原则,即先同化项层的设计,而后,根据业务需求,逐渐增加延伸类的设计。例如,图1中给出了Computer类型家族,由父类CComputer和三个子类ClbmComputer、CD

5、ellComputer和CHpComputer组成。如果在设计项层类之后,则构建如代码l中所示的操作,随着类别的衍生,新产生的子类仍旧希望复用已经完成的代码,即作为参数传递给Repair方法。C*中,对于这种将子类对象的指针当做父类对象处理的语法方式称之为Upcasting(向上类型转换1。继承关系的准则之一为:子类的实现过程不能够削弱父类的接口,所以Upcasting是安全的。图1Compter类型家族的继承关系代码1:voidRepair(CComputer*compter){∥实参compter可能是任意子类对象的指针eomputer->PowerOn();}当Upcating发生

6、时,正确的对象行为需要多态机制来保证,而不需要程序员的人为控制。代码1中,实际传递给Repair方法的参数,可能是任意类型的子类对象指针,由于CComputer类型采用了抽象类设计,所以,多态机制可以保证调用到实际参数类犁的PowerOn方法。由此可见,staticcast在程序中极少出现,很多需要使用静态类型转换的场景均默认支持了这种转换。3.dynamic_castdynamiccast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。在类层次问进行上行转换时,dynamiccast和staticcast的效果是一样的:在进行下行转换时,dynamic具有类型检查的功

7、能,比.caststaticcast更安全。与Upcasting相对的概念为Downcasting,即将一个父类对象指针转换为特定的子类对象指针。对于命题“IBM计算机是一个计算机”,显然,符合人的认知习惯;反之,“一个计算机一定足mM计算机”就显得过于唐突了。在发生继承关作者简介:侯勇.男,河南郑州人,硕士,助教,研究方向:嵌入式系统、网络通信。·-——64·———系的前提下,子类对象很可能具有某些父类对象不具有的方法,如果误将一个父类对象转换为一个子类对象,进而调用这些父类对象并不存在的方法,显然,程序是无法正常执行的。代码2:classB{public:virtualvoidfb0

8、();};classD:publicBfpublic:voidf000{}};voidfunc(B+pb){D+pdl2staticcast(pb):D’pd22dynamic_cast(pb):}在上面的代码段中,如果pb指向一个D类型的对象,pdl和pd2是一样的,并且对这两个指针执行D类犁的任何操作都是安全的;如果pb指向的是一个B类犁的对象.那么pdl将是~个指向该对象的指针,对它进行D类型的操作将是不安令的,而pd2将是一

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

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

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