c静态类型转换.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c静态类型转换

//该模块中的函数可能会被C程序调用,也可能被C++程序调用 #include iostream #include a.h using namespace std; void show(void) { cout 无论是什么程序调用我都没有问题,这就叫做任性! endl; } a.h #ifndef _A_H #define _A_H //该模块中的函数可能会被C程序调用,也可能被C++程序调用 #ifdef __cplusplus extern C { #endif void show(void); #ifdef __cplusplus } #endif #endif //_SHOW_H main.cpp //使用C++程序调用C++模块中的函数 #include a.h int main(void) { show(); return 0; } main.c //使用C程序调用C++模块中的函数 #include a.h int main(void) { show(); return 0; } 静态类型转换 目标类型 变量名=static_cast目标类型(源类型变量名) 功能:当目标类型和源类型之间只要有一个方向可以发生隐式类型转换,则在两个方向上都可以进行静态类型转换, 否则不能进行类型转换 常量类型转换 目标类型 变量名=const_cast目标类型(源类型变量名) 功能:主要用于去除指针/引用上面的常属性; 动态类型转换 目标类型 变量名=dynamic_cast目标类型(源类型变量名) 功能:主要用于具有多态特性的父子类之间的转换; #includeiostream using namespace std; class A{ virtual void foo(void){} }; class B:public A{}; class C:public B{}; class D{}; int main(void){ B b; A* pa=b;//向上造型 coutpa=paendl; B* pb=dynamic_castB*(pa);//安全 coutpb=pbendl; C* pc=dynamic_castC*(pa); coutpc=pcendl; D* pd=dynamic_castD*(pa); coutpd=pdendl; try{ A ra=b; C rc=dynamic_castC(ra); } catch(exception ex){ cout类型转换失败ex.what()endl; } cout----------------endl; pb=static_castB*(pa);//一般安全 coutpb=pbendl; pc=static_castC*(pa); coutpc=pcendl; cout--------------endl; pb=reinterpret_castB*(pa); /*最不安全目标类型 变量名=reinterpret_cast目标类型(源类型变量名) 功能:主要用于任意两个指针类型/指针和整型之间的转换*/ coutpb=pbendl; pc=reinterpret_castC*(pa); coutpc=pcendl; pd=reinterpret_castD*(pa); coutpd=pdendl; return 0; } pa=0xbff2206c pb=0xbff2206c pc=0 pd=0 类型转换失败std::bad_cast ---------------- pb=0xbff2206c pc=0xbff2206c -------------- pb=0xbff2206c pc=0xbff2206c pd=0xbff2206c c++社区对c程序员的建议 (1)尽量少使用宏,而代之以const和enum(枚举)以及inline(内联),template(模版)替代之; (2)变量随时用随时申明; (3)尽量少用malloc/free,多使用new/delete; (4)避免使用void*,指针算术,联合以及强制类型转换; (5)尽量少使用c风格的字符串,使用string类型 (6)理解面向对象的编程思想 成员变量的定义 类中的属性 叫做成员变量; class 类名 { 数据类型 成员变量名 }; 成员函数的定义 类中的行为 叫做成员函数 class 类名 { 返回值类型 函数名(形参列表) { 函数体 } } c++中类和结构体的主要区别 a.关键字不同 b.类中的默认访控属性是私有的,结构体的默认访控属性是公有的 构造加初始化

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档