//以下对上面的程序进行改进
#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;
}