摘要: 类似代码如下:class A{public:virtual void Test(){}};class B:public A{public:virtual void Test(){}};B b;A a = b;A * pA = &b;a.Test();pA->Test();大家都知道a.Test调用的是A::Test,而pA->Test调用的是B::Test,那么为什么呢?首先来看a.Test;其实很容易理解,这里的a就是一个A类型的变量,它的内存布局在赋值的时候已经从B转换到A了,多于的数据都被丢弃,b对象的虚函数表不会被复制,A a时内存里已经有a的虚函数表了,因此其就是 阅读全文
posted @ 2011-04-19 20:55 蓝鸿鹄 阅读(129) 评论(0) 推荐(0)