#include
using namespace std;
class Date
{
public:
void SetDate(int year,int month,int day)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d1,d2;
d1.SetDate(2017, 10, 22);
d2.SetDate(2017, 10, 23);
return 0;
}
以上代码是一个日期类,创建了2个对象d1和d2,都调用了成员函数SetDate()。成员函数是如何知道哪个对象要调用它呢?如果用c语言去实现以上功能,代码如下。
#define _CRT_SECURE_NO_WARNINGS
typedef struct Date
{
int _year;
int _month;
int _day;
}Date,*pdate;
void SetDate(pdate this,int year,int month,int day)
{
this->_year = year;
this->_month = month;
this->_day = day;
}
int main()
{
Date d1, d2;
SetDate(&d1, 2017, 10, 22);
SetDate(&d2, 2017, 10, 23);
return 0;
}
d1.setdate(2017, 10, 22);
00C7177E push 16h
00C71780 push 0Ah
00C71782 push 7E1h
00C71787 lea ecx,[d1]
00C7178A call date::setdate (0C7101Eh)
void setdate(int year, int month, int day)
{
00C71700 push ebp
00C71701 mov ebp,esp
00C71703 sub esp,0CCh
00C71709 push ebx
00C7170A push esi
00C7170B push edi
00C7170C push ecx
00C7170D lea edi,[ebp-0CCh]
00C71713 mov ecx,33h
00C71718 mov eax,0CCCCCCCCh
00C7171D rep stos dword ptr es:[edi]
00C7171F pop ecx
00C71720 mov dword ptr [this],ecx
_year = year;
00C71723 mov eax,dword ptr [this]
00C71726 mov ecx,dword ptr [year]
00C71729 mov dword ptr [eax],ecx
_month = month;
00C7172B mov eax,dword ptr [this]
00C7172E mov ecx,dword ptr [month]
00C71731 mov dword ptr [eax+4],ecx
_day = day;
00C71734 mov eax,dword ptr [this]
00C71737 mov ecx,dword ptr [day]
00C7173A mov dword ptr [eax+8],ecx
}
#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
class date
{
public:
void setdate(int year, int month, int day)
{
cout << this << endl;
// _year = year;
// _month = month;
// _day = day;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
date d1, d2;
date *p = &d1;
d1.setdate(2017, 10, 22);
p->setdate(2017, 10, 22);
p = NULL;
p->setdate(2017, 10, 22);
//d2.setdate(2017, 10, 23);
return 0;
}
以上代码的运行结果为
00AFFD20
00AFFD20
00000000