假如有这样一个类
class B:{
public:
void fun(void){cout<<'3'<<endl;}
void fun2(void){cout<<'4'<<endl;}
};
只有两个成员函数的类B。
B *p = new B;
这句话的意思是 申请B型内存空间,并将空间首地址赋给p。
那么是不是就可以 用 p->fun()调用成员函数了, 而这个和 this->fun()是不是一样。
也可以理解为 p == this ?
问题源自于这样一段代码
class A{
public: virtual
void fun(void){cout <<
'1'
<< endl;}
virtual
void fun2(void){cout <<
'2'
<< endl;}
};
class B:public A{
public:
void fun(void){cout<<'3'<<endl;}
void fun2(void){cout<<'4'<<endl;}
};
int main()
{
void (*fun)(A*);//设置函数指针fun,参数类型为 指向A型对象的指针
A *p=new B;//申请B型对象空间,并把这个内存单元的地址保存在p中
long lVptrAddr;//定义长整形变量,一会用来保存一个4字节的地址
memcpy(&lVptrAddr,p,4);//
memcpy(&fun,reinterpret_cast<long*>(lVptrAddr),4);
fun(p);
delete p;
system("pause");
}
memcpy(&lVptrAddr,p,4);// p指向地址为首地址,依次读取4个字节,并将这4个字节的内容放在&lVptrAddr为首地址的内存空间中去,就完成了对long lVptrAddr的赋值。
通过单步运行发现,lVptrAddr的值就是 p 指向的 _vfptr的值。..试问 这个_vfptr 就是 B对象的this么?
_vfptr 下 两个函数 B::fun() B::fun2() |