#include <iostream> #include <Windows.h> using namespace std; class base { public: virtual void f() { cout << "Base::f" << endl; } int type; }; class Derive :public base { public: Derive(){type = 1;} void f() { cout << "Derive::f" << endl; } void f1() { cout << "Derive::f1" << endl; } int type; }; class Derive2 :public base { public: Derive2(){type = 2;} void f() { cout << "Derive2::f" << endl; } void f2() { cout << "Derive2::f2" << endl; } int type; }; void main() { base *b = new Derive(); /* Derive2* pb = (Derive2*)b; pb->f2(); //如果二个子类是很复杂的,很多时候这里就会报错 */ if(b->type == 2) //正确的使用方式应该判断一下子类的原始类型 { Derive2* pb = (Derive2*)b; pb->f2(); } system("pause"); }