#include <iostream> using namespace std; class Base{ protected: Base *next; public: Base(Base *t){ next=t; } Base(){ next=NULL; } virtual void fun(){ if(next) next->fun(); } virtual ~Base(){} }; class A1:public Base{ public: A1(Base *t):Base(t){ } A1(){ } void fun(){ cout<<"a1"<<endl; Base::fun(); } }; class A2:public Base{ public: A2(Base *t):Base(t){ }; A2(){ } void fun(){ cout<<"a2"<<endl; Base::fun(); } }; class A3:public Base{ public: A3(Base *t):Base(t){ } A3(){ } void fun(){ cout<<"a3"<<endl; Base::fun(); } }; int main(void) { A3 *pb3=(A3 *)new A3(); A2 *pb2=(A2 *)new A2(pb3); A1 *pb1=(A1 *)new A1(pb2); pb1->fun(); return 0; }