问题如上。
代码:
#include <iostream>
using namespace std;
class A
{
public:
virtual void f()
{
cout << "A f()" << endl;
}
};
class B : public A
{
public:
virtual void f()
{
cout << "B f()" << endl;
}
};
int main()
{
A a;
B b;
a = b;
a.f();
A *aa=&b;
aa->f();
return 0;
}
很简单的一个例子,结果输出自然是:
A f()
B f()
但是我不明白为什么会这样。 如果说a = b的时候是将b先类型转化成a再进行复制的,所以没有改变a里面的虚函数表,那A *aa=&b为啥就不是了。 而且我查了下其他资料,基类和派生类的虚函数表用的_vptr也不是同一个,所以是怎么具体实现的呢?