标签:
#include<iostream>
using namespace std;
class point3d;
class point2d;
class point3d
{
private:int x; int y; int z;
public:
point3d(int a = 0, int b = 0, int c = 0) :x(a), y(b), z(c) {}
};
class point2d
{
int a;
int b;
public:
point2d(int x=0,int y=0):a(x),b(y){}
operator point3d()
{
return{ a,b,0 };
}
};
int main()
{
point2d z;
point3d q = z;
return 0;
}
008538B4 lea eax,[q] ;将q的地址赋给eax
008538B7 push eax ;压栈.作为参数
008538B8 lea ecx,[z] ;将z的地址赋给ecx
008538BB call point2d::operator point3d (085133Eh)
00853380 push ebp
00853381 mov ebp,esp
00853383 sub esp,0CCh
00853389 push ebx
0085338A push esi
0085338B push edi
0085338C push ecx
0085338D lea edi,[ebp-0CCh]
00853393 mov ecx,33h
00853398 mov eax,0CCCCCCCCh
0085339D rep stos dword ptr es:[edi]
0085339F pop ecx ;
008533A0 mov dword ptr [this],ecx ;将 point2d z的地址赋给了this指针
return{ a,b,0 };
008533A3 push 0 ;0压栈
008533A5 mov eax,dword ptr [this]
008533A8 mov ecx,dword ptr [eax+4] ;将z的a变量的值赋给ecx
008533AB push ecx ;ecx压栈
008533AC mov edx,dword ptr [this]
008533AF mov eax,dword ptr [edx] ;将a的值赋给了eax中
008533B1 push eax ;eax压栈
008533B2 mov ecx,dword ptr [ebp+8] ;取出q的地址
008533B5 call point3d::point3d (0851357h) ;point3d(一个q的地址.参数.3个变量参数)
008533BA mov eax,dword ptr [ebp+8] ;将q的地址取出来.作为返回值
}
标签:
原文地址:http://www.cnblogs.com/zengyiwen/p/5755199.html