this一个小小的迷惑
2010-01-29 09:40
99 查看
#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.csdn.net/space.php。
当运行到D的构造函数的时候,this的内部情况如下图,可以看出来,两个this的地址是一致的,都为0x0012ff78,但
vfptr的值已经发生了变化,这就是为什么两次调用产生结果不同的原因。以上就是自己的理解
相关文章推荐
- hdu1150 最小点覆盖集的一个小小的变形
- 条款10:令operator= 返回一个reference to *this
- 一个小小的硕士生的offer路
- Java8 HashMap源码解读时的一个迷惑
- Android开发IM中的消息Notification的一个小小使用.
- C++ 令operator= 返回一个 reference to this
- 一个小小发现^V^
- 【经验小谈】android4.2之后Toast定义的一个特点This Toast was not created with Toast.makeText()
- 一个小小的程序员——"我"
- 一个小小的故事 Solmyr 的小品文系列之一:字符串放在哪里?[转载]
- 令operator=返回一个reference to *this
- 类中函数的一个隐含参数--this指针
- 一个被自己蠢哭的bug: Syntax error on token "String", delete this token
- 分享一个jquery插件,弥补一下hover事件的小小不足
- JS+html+css实现的一个小小的贪吃蛇游戏
- 小小的得了一个奖
- 一个小小的错误
- 一个小小的正则表达式浅析
- MYSQL不能从远程连接的一个解决方法(s not allowed to connect to this MySQL server)
- 使用google visualization API的一个小小尝试