#include<bits/stdc++.h>
using namespace std;
/**
* typeid 识别基类指针所指的实际对象,并进行不同的成员函数调用
* */
class B {
int x;
public:
virtual void f() {
printf(" B f\n");
}
};
class D1 : public B {
public:
virtual void g() {
printf(" D1 f\n");
}
};
class D2: public B {
int x;
public:
virtual void f() {
printf("D2 f\n");
}
void h() {
printf("D2 h\n");
}
};
void accessB(B *pb) {
if(typeid(*pb) == typeid(B)) {
pb->f();
}
else if(typeid(*pb) == typeid(D1)) {
D1 *d1 = dynamic_cast<D1 *>(pb);
d1->g();
}
else if(typeid(*pb) == typeid(D2)) {
D2 *d2 = dynamic_cast<D2 *>(pb);
d2->h();
}
}
int main() {
B b;
D1 d1;
D2 d2;
accessB(&b);
accessB(&d1);
accessB(&d2);
return 0;
}