#include<bits/stdc++.h>
using namespace std;
/**
* dynamic_cast 强制类型转换,派生类对象指针转为基类对象指针
* */
class Base {
public:
virtual ~Base() {
}
};
class D :public Base {
void f() {
printf("f in D\n");
}
};
int main() {
Base *pb, b;
D *pd, d;
// 默认转换,编译时完成
pb = &d;
pd = &d;
// 向上转换,运行时完成,将派生类对象指针转为基类对象指针
pb = dynamic_cast<Base *>(&d);
pb = dynamic_cast<Base *>(pd);
// 向下强制转换
pb = &b;
pd = dynamic_cast<D *>(pb);
if(pd) {
printf("ok\n");
}
else {
printf("error\n");
}
// 向下强制类型转换
pd = dynamic_cast<D *>(&b);
if(pd) {
printf("ok\n");
}
else {
printf("error\n");
}
pb = &d; // 基类指针必须先指向派生类才可以转换
pd = dynamic_cast<D *>(pb); // 将基类对象指针转为派生类对象指针
if(pd) {
printf("ok\n");
}
else {
printf("error\n");
}
return 0;
}