//以下对上面的程序进行改进 #include <iostream> using namespace std; class A{ public: virtual void fn()=0; //如果这个声明后不定义的话,必须得声明为纯虚函数才行,不然不能通过编译 }; //A类我中无fn成成员函数 class B : public A { public: void fn(){ cout<<" I am Class B"; }; }; class C : public A{ public: void fn(){ cout<<" I am Class C"; }; }; void f(A* pa) { pa->fn(); }; int main() { B b; C c; f(&c); f(&b); //这里好像直接传B *b就不能给f函数,但声明为A *a就可以传入f函数 //这里可能有一个类型传换的问题,暂时不做考虑 A *a = new B(); A *aa = new C(); f(a); f(aa); cout<<"I am main"; system("pause"); return 0; }