#include
using namespace std;
class MyClassA{
public:
virtual void f( ){cout<<1; }
void g( ){ cout<<2; }
};
class MyClassB: public MyClassA {
public:
virtual void f( ){ cout<<3; }
void g( ){ cout<<4; }
};
void show( MyClassA &a) { a.f( ); a.g( ); }
void print(MyClassA *p){ p->f(); p->g();}
int main(void)
{
MyClassB b;
show(b);
print(&b);
cout<<endl;
system("pause");
return 0;
}
void print(MyClassA* p)
{
p->f(); //通过基类指针调用虚函数f,调用的是p实际指向的子类对象的f函数,所有出3,这个就是多态的实现
p->g(); //通过基类指针调用函数g,因为g函数时普通函数,因此,调用的是基类的g函数,通过子类指针调用g函数调用的才是子类的g函数
}
引用和指针是一样的,所以show函数和print函数的调用是一样的