#include <iostream>
using namespace std;
class B;
B* b;
class B{
public:
B(){
this->print();//打印B
b = this;
}
void virtual print(){
cout<<"B"<<endl;
}
};
class D : public B{
public:
D(){
}
void print(){
cout<<"D"<<endl;
}
int j;
};
int main(){
D d;
b->print();//打印D
}
不知道为什么打印的不一致呢
自己的理解:由于D继承自B,构造D的时候需要先构造B,在B的构造函数中的this内部的具体情况如下图,此时D还没有构造出来,vfptr的详解参考student.youkuaiyun.com/space.php。
当运行到D的构造函数的时候,this的内部情况如下图,可以看出来,两个this的地址是一致的,都为0x0012ff78,但
vfptr的值已经发生了变化,这就是为什么两次调用产生结果不同的原因。以上就是自己的理解