1.static_cast :静态类型转换
2.reinterpreter_cast :重新解释类型,有点类似于强制转换
3.dynamic_cast 动态类型转换,在父子类之间的多态类型转换
代码例子:
class animal{
public:
virtual void cry() = 0;
};
class dog :public animal{
public:
void cry(){
cout << "this dog is cring !!!" << endl;
}
void doThings(){
cout << "the dog eat stone!!!" << endl;
}
};
class cat : public animal{
public:
void cry(){
cout << "this cat is cring!!!" << endl;
}
void doThings(){
cout << "this cat eat fish" << endl;
}
};
void display(animal *obj){
obj->cry();
dog *d1 = dynamic_cast<dog *>(obj);
if (d1!=NULL)
{
d1->doThings();
}
cat *c1 = dynamic_cast<cat *>(obj);
if (c1!=NULL)
{
c1->doThings();
}
}
int main(void){
dog d1;
cat c1;
display(&d1);
display(&c1);
animal *base1;
base1 = static_cast<dog*>(&d1);
base1->cry();
int a;
cin >> a;
}