64,654
社区成员
发帖
与我相关
我的任务
分享
// vc2008
class AAA
{
public:
AAA() : m_a1(1){}
void display(void)
{
printf("m_a1 is : %d\n", m_a1);
}
private:
int m_a1;
};
int _tmain(int argc, _TCHAR* argv[])
{
AAA obj;
AAA *ptr = &obj;
obj.display();
ptr->display();
return 0;
}
/*
AAA *ptr = &obj;
lea eax,[ebp-8]
mov dword ptr [ebp-14h],eax
obj.display();
lea ecx,[ebp-8] // 有一参数送到ecx,大约是this
call 004111D1
ptr->display();
mov ecx,dword ptr [ebp-14h] // 有一参数送到ecx,大约是this
call 004111D1
书上说:
obj.display()被内化为display(&obj)
ptr->display()被内化为display(ptr)
问题一:
一直说,class的nonstatic成员函数的调用,会传进一个隐式this指针。
obj(&obj)是隐式this指针吗?
ptr是隐式this指针吗?
ecx是隐式this指针吗?
*/
#include <iostream>
#include <stdio.h>
using namespace std;
class AAA
{
public:
AAA() : m_a1(1){ cout << "this: " << this << endl; }
void display(void)
{
printf("m_a1 is : %d\n", m_a1);
}
private:
int m_a1;
};
int main()
{
AAA obj;
AAA *ptr = &obj;
obj.display();
ptr->display();
cout << "ptr: " << ptr << endl;
cout << "&obj: " << &obj << endl;
return 0;
}