static_cast
1.可以用于基本类型的转换,如short与int、int与float、enum与int之间
2.不能转换 这几个修饰符const _unaligned volitale,修饰的成员
3.这转换是不安全的转换失败不会返回NULL,直接程序崩溃
class Base1 {
public:
Base1()
{
}
int a;
void fun1() { cout << "Base::fun1" << endl; }
void fun2() { cout << "Base::fun2" << endl; }
};
class Derive : public Base1 {
public:
Derive()
{
}
int b;
void fun2() { cout << "Derive::fun2" << endl; }
void fun4() { cout << "Derive::fun4" << endl; }
};
class A {
public:
int a;
void fun1() { cout << "A::fun1" << endl; }
};
class B {
public:
int b;
B(A& a) { cout << "B::constructor" << endl; }
void fun2() { cout << "B::fun2" << endl; }
};
int main()
{
//普通类型转换
char ch = 'a';
short sh = 10;
int i1 = static_cast<char>(ch);//成功,将char型数据转换成int型数据
int i2 = static_cast<short>(sh);
//不相关类型转换
A a;
B b = static_cast<B>(a); //A->B
//b.fun1(); //编译错误,error: no member named 'fun1' in 'B'; did you mean 'fun2'?。 因为对于b,没有fun1成员函数。
b.fun2(); //B::fun
//相关类型转换
Base1* b=new Base1();
Derive* d = new Derive();
Base1* pB = static_cast<Base1*>(d);//向上转换 子类转父类
pB->fun1();
Derive* pU = static_cast<Derive*>(b);//向下转换 父类转子类
pU->fun4();
}