1.类型转换算子(见代码 :02cast.cpp)
C语言中:隐式类型转换: 小到大 char --> int
显示类型转换(强制类型转换): 大到小 int --> char
如: char c = 'a';
int i = (int)c; //C语言中强制类型转换风格
C++中:
int i = (int)c;
int i = int(c);//C++ 风格的强制类型转换
int i = 10;
char c = (char)i;
char c = char(i);
(1)静态类型转换
目标类型 变量名 = static_cast<目标类型>(源类型变量名);如: int* p;
void* v = p;//int* -> void*
p = static_cast<int*>(v)
v = static_cast<void*>(p)
功能:
在源类型和目标类型之间只要有一个方向可以做隐式类型转换,那么在两个方向上都可以做静态类型转换,
反之如果在两个方向都不能做隐式类型转换,那么在两个方向上都不能做静态类型转换。
(2)常量类型转换
目标类型 变量名 = const_cast<目标类型>(源类型变量名)如: const int* pi = NULL;
int* pj = const_cast<int*>(pi)
功能:
用于去除 指针/引用 上的常属性
(3)重解释类型转换
目标类型 变量名 = reinterpret_cast<目标类型>(源类型变量名)如: int i; <==> 4 个char <==> 2个short
int* pi;
double* pd = reinterpret_cast<double>(pi);
功能:
主要用于任何类型的指针 或 引用之间的转换,甚至可以进行指针和整型之间的转换
(4)动态类型转换
目标类型 变量名 = dynamic_cast<目标类型>(源类型变量名);功能:
主要用于具有多态特性的父子类 指针/引用 之间的转换 (以后讲到)
2.C++之父给C程序员编程的建议
(1)尽量少使用宏,而代之以const 、enum、inline以及template(模版) 代替
(2)变量随使用随声明
(3)尽量少使用malloc/free 等函数,而使用 new/delete 去代替
(4)避免使用void*、 指针算数(指针+数)、联合以及强制类型转换
(5)尽量少使用C风格字符串,用string类型代替
char arr[] char* pstr; "hello"
string str = "hello";
string str("hello");
string str2 = str;
string str3;
str3 += str;
支持下标访问
C风格字符串和string类型的转换:
char arr[20];
string str;
str = arr;//直接转换
strcpy(arr,str.c_str());//c_str()函数用于将string 类型转换为C风格字符串
(6)理解面向对象的编程思想