您的位置:首页 > 编程语言 > C语言/C++

C++四种强制类型转换

2015-12-16 00:01 218 查看
大家都知道在C语言里强制类型转换的方法非常简单,只要在要转换的变量前用括号确定要转换的类型即可,如要将一个double型的变量强制转换为int类型,代码如下:
double x = 3.14;
int y = (int)x;
另外,还可有更高级的转换,如把int
*类型的变量转换为int ,代码如下:
int x =
20;
int *p = &x;
int y =
(int)p;

在C++语言里为了让强制类型转换更明显,更安全,所以把不同情况下的强制类型转换分为四种,分别为:
static_cast 静态类型转换,属于最安全的强制类型转换。
const_cast 在可变与不可变类型之间转换
dynamic_cast 在多态的情况下,父子类之间的转换
reinterpret_cast 所有类型间的转换,最不安全的转换

为了更好的说明问题,下面举几个使用方面的具体例子,代码如下:

static_cast
--------------------------------------------------------------------

int
main()
{
int x = 0;
double y =
3.14;
x =
static_cast<int>(y);

system("pause");
return
0;
}

--------------------------------------------------------------------

const_cast
--------------------------------------------------------------------

int
main()
{
int x = 20;
int const *p
= &x;
int *q = const_cast<int
*>(p);

system("pause");
return
0;
}

--------------------------------------------------------------------

dynamic_cast
--------------------------------------------------------------------

#include
<iostream>
using std::cout;
using std::endl;

//X类是父类
class
X
{
public:
void test()
{
cout << "Xtest" <<
endl;
}

//虚函数
virtual void foo()
{
cout << "XFoo" <<
endl;
}
};

//Y类是子类,继承了X类
class Y : public
X
{
public :
void TTT()
{
cout << "YTTT" <<
endl;
}

//重写的虚函数
virtual void foo()
{
cout << "YFoo" <<
endl;
}
};

//
int
main()
{
X *p = new Y;
dynamic_cast<Y
*>(p)->TTT();

system("pause");
return
0;
}

--------------------------------------------------------------------

reinterpret_cast
--------------------------------------------------------------------

int
main()
{
int x = 20;
int *p =
&x;
int z =
reinterpret_cast<int>(p);

system("pause");
return
0;
}

--------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息