C++虚函数与C++虚函数表
2012-11-02 21:58
225 查看
这个问题被勾起来的原因是听到师兄面试又被提到。本来知道这玩意,但还是想实践检验一下加深理解。
1)上酸菜:
类是创建对象的模子!
2)调试跟踪:
watch的皆是数据对象。(内存中包括数据和代码)
可以看到:
1)r的id之前一个__vfptr(虚函数表指针)。
2)l的color之前是一个root。注意其中的__vfptr[0]已经变成leaf::say(void)。
于是有下图,注意到l中包含一个root。
对于p和*p有:
可以看到:
0)标出的内容值都是一样。
1)p有两种解释,一个leaf或者一个虚函数表。
2)*p只有一种数据对象解释:一个root。
a)注意到源代码中定义为root* p。b)注意下面没有了color。
于是有下图:
1)上酸菜:
类是创建对象的模子!
#include <iostream> using namespace std; class root { protected: int id; public: root() { id = 1; } virtual void say() { cout << "i am the root" << endl; } virtual void move() { cout << "i can move here and there" << endl; } }; class leaf: public root { protected: int color; public: leaf() { id = 2; color = 999; } void say() { cout << "I am the leaf" << endl; } }; int main(int argc, char* argv[]) { root r; r.say(); leaf l; l.say(); root* p; p = new leaf(); //p->say(); //p->move(); return 0; }
2)调试跟踪:
watch的皆是数据对象。(内存中包括数据和代码)
可以看到:
1)r的id之前一个__vfptr(虚函数表指针)。
2)l的color之前是一个root。注意其中的__vfptr[0]已经变成leaf::say(void)。
于是有下图,注意到l中包含一个root。
对于p和*p有:
可以看到:
0)标出的内容值都是一样。
1)p有两种解释,一个leaf或者一个虚函数表。
2)*p只有一种数据对象解释:一个root。
a)注意到源代码中定义为root* p。b)注意下面没有了color。
于是有下图:
相关文章推荐
- C++虚函数表解析(转) ——写的真不错
- C++虚函数及虚函数表解析
- 解析C++虚函数表
- C++虚函数与虚函数表(编译器查看)
- 转自haoel http://blog.csdn.net/haoel: C++ 虚函数表解析
- C++ 虚函数表解析
- C++虚函数表与对象布局
- C++虚函数及虚函数表解析
- C++ 虚函数表与内存模型
- C++ 虚函数表解析
- [C++对象模型][9]虚继承与虚函数表
- C++ 虚函数表解析 .
- C++虚函数表解析
- C++虚函数与虚函数表
- C++ 虚函数表解析
- C++ 虚函数表解析
- C++虚函数表解析(转)
- C++多重继承,虚函数表的次序
- C++学习笔记之多态与虚函数,虚函数表
- C++ 虚函数表解析