- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)