#include <iostream>
using namespace std;
class animal {
public:
virtual void self() = 0;
};
class dog :public animal
{
public:
void self() {
cout << "dog-----" << endl;
}
void print() {
cout << "this is a dog---" << endl;
}
};
class cat :public animal
{
public:
void self() {
cout << "cat-----" << endl;
}
void print() {
cout << "this is a cat---" << endl;
}
};
void display(animal* base) {//运行时类型识别
base->self();
dog* d = dynamic_cast<dog*> (base); //父类对象--->子类对象 向下转型(老子转儿子)
if (d != NULL) {
d->print();
}
cat* c = dynamic_cast<cat*> (base); //转换失败 c=null
if (c != NULL) {
c->print();
}
}
class tree {
};
int main()
{
dog d;
cat c;
animal* a = NULL;
//display(&d);//dog------; this is a dog---
//display(&c);//cat-------; this is a cat---
//a = dynamic_cast<animal*> (&d);;
//display(a); // dog------; this is a dog---
//a = static_cast<animal*> (&d);;
//display(d); // dog------; this is a dog---
//a = reinterpret_cast<animal*> (&c);;
//display(a); //cat-------; this is a cat---
tree t;
//a = static_cast<animal*> (&t);; //类型转换无效(类型检查出错)
//a = dynamic_cast<animal*>(&t); //转换失败 tree不是多态类型
a = reinterpret_cast<animal*> (&t);;//转换成功(强制类型转换)
a->self(); //无法运行
system("pause");
return 0;
}
动态类型转换
最新推荐文章于 2022-07-01 08:33:09 发布