const_cast将const对象转换成非const对象
如:
const int x=10;
//const_cast<必须是指针或者引用>
int &y=const_cast<int&>(x);
dynamic_cast将带有虚函数的基类指针转换成派生类指针
如:
// testorder.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
//class a{
//public:
// virtual void play()
// {
// cout<<"haha"<<endl;
// }
//};
//class b:public a{
//public:
// virtual void play()
// {
// cout<<"i am in b"<<endl;
// }
//};
//
//int main()
//{
//
// a *atmp=new a();
// b* btmp=new b();
// b* bttmp=dynamic_cast<b*>(atmp);
// bttmp->play();
//
// return 0;
//}
#include <iostream>
using namespace std;
class CBasic
{
public:
virtual int test(){return 0;} // 一定要是 virtual
};
class CDerived : public CBasic
{
public:
virtual int test(){ cout<<"haha"<<endl; return 1;}
};
int main()
{
CBasic cBasic;
CDerived cDerived;
CBasic * pB1 = new CBasic;
CBasic * pB2 = new CDerived;
//dynamic cast failed, so pD1 is null.
CDerived * pD1 = dynamic_cast<CDerived * > (pB1);
//dynamic cast succeeded, so pD2 points to CDerived object
CDerived * pD2 = dynamic_cast<CDerived * > (pB2);
pD2->test();
//dynamci cast failed, so throw an exception.
// CDerived & rD1 = dynamic_cast<CDerived &> (*pB1);
//dynamic cast succeeded, so rD2 references to CDerived object.
CDerived & rD2 = dynamic_cast<CDerived &> (*pB2);
return 0;
}
很奇怪,父类指针声明的时候指的是子类的对象,这样进行dynamic_cast的时候才会转换成功====================
static_cast:基本的数据类型间的转换
reinterprete_cast:最普通的用途是函数指针类型间的转换
int haha()
{
cout<<"haha"<<endl;
return 1;
}
void tt()
{
}
typedef void (*func)();
int main()
{
func fun[10];
fun[0]=reinterpret_cast<func>( haha);
return 0;
}