cpp提供了四种类型转换
class Base
{
public :
Base ( ) : b ( 1 ) { }
int b;
} ;
class Dev : public Base
{
public :
Dev ( ) : d ( 3 ) { }
int d;
} ;
int main ( )
{
const int a = 10 ;
float f1 = ( float ) a;
float f = static_cast < float > ( a) ;
cout << "a: " << a << endl;
cout << "f1:" << f1 << endl;
cout << "f:" << f << endl;
void * p = NULL ;
int * ps = static_cast < int * > ( p) ;
int * r = NULL ;
void * rp = static_cast < void * > ( r) ;
Dev * dp = static_cast < Dev* > ( new Base ( ) ) ;
printf ( "%x\n" , dp- > d) ;
return 0 ;
}
class Base
{
public :
virtual void fun ( ) { cout << "Base::fun" << endl; }
} ;
class Dev : public Base
{
public :
int v;
void fun ( ) { cout << "Dev::fun" << endl; }
} ;
int main ( )
{
int a = 10 ;
Base * bp = new Base ( ) ;
Dev * dp = dynamic_cast < Dev* > ( bp) ;
if ( ! dp)
{
cout << "dp is NULL" << endl;
}
}
int main ( )
{
const int constant = 1 ;
const int * constp = & constant;
int * modifier = const_cast < int * > ( constp) ;
* modifier = 2 ;
cout << "constant" << & constant<< " " << constant << endl;
cout << "constp: " << constp << " " << * constp << endl;
cout << "modifier: " << modifier << " " << * modifier << endl;
int auto_int = 1 ;
const int * autop = & auto_int;
int * moden = const_cast < int * > ( autop) ;
* moden = 2 ;
cout << & auto_int << " " << auto_int << endl;
cout << autop << " " << * autop << endl;
cout << moden << " " << * moden << endl;
return 0 ;
}
int main ( )
{
int i = 1 ;
int s = 2 ;
int * ptr = & s;
i = reinterpret_cast < int > ( ptr) ;
ptr = reinterpret_cast < int * > ( i) ;
printf ( "%x\n" , i) ;
printf ( "%x\n" , ptr) ;
return 0 ;
}