class A

{
public:
virtual void f()
{
cout << "A" << endl;
}
};
class B:public A
{
public:
virtual void f()
{
cout << "B" << endl;
}
};
int main()
{
A *pa = new A();
pa->f();
B *pb = (B*)pa;
pb->f();
delete pa, pb;
pa = new B();
pa->f();
pb = (B*)pa;
pb->f();
}
输出结果为AABB
在B *pb = (B*)pa; 转化pa为B类型并新建一个指针pb,将pa复制到pb。但pa的指针始终没有发生变化,所以pb也指向pa的f函数。
pb = (B*)pa;转化pa为B类指针给pb赋值,但pa所指向的f函数是B类的f函数,所以pb所指向的f函数是B类的f函数。