C++虚函数的一点分析与思考 (三)

2014-11-24 02:27:51 · 作者: · 浏览: 11
达到运行时刻的动态调用。对于非虚函数,是编译器确定具体调用哪一个函数,因此会在目标代码中直接写死调用。还有前面说到不知道取类的函数地址,后面突然想到了一个方式,测试了一下还行。
代码如下:
char buf[100];
sprintf(buf, "%d", &(CRect::PrintMemory));//sprintf的目的主要是因为编译器编译期禁止我对函数指针强转为int,我绕了一个弯,做到了。
*(pvtbl) = atoi(buf);
TRACE_FUCTION_AND_LINE("after set CRect::PrintMemory function......");
fakecharRect->display();//打印,惊讶调用。调用PrintMemory方法
确定如此,调用的PrintMemory方法。此外我还简单测试了一下不同CRect对象的vptr,确实都是一样的,一个类一份内存。