CSample::CSample()
{
}
CSample::CSample(int x, int y)
{
m_x = x;
m_y = y;
}
CSample::~CSample()
{
if ( m_x != m_y )
{
cout << "x != y" << "\tx = " << m_x << "\ty = " << m_y << endl;
}
else
{
cout << "x != y" << "\tx = " << m_x << "\ty = " << m_y << endl;
}
}
void CSample::disp()
{
cout <<"x = " << m_x << "\ty = " << m_y << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
int CSample::*pc;//新增数据成员 注:通过这种方式我们很少这样做
//CSample s;
pc = &CSample::m_x;//指针指向数据成员地址
printf("&m_x = %p\n", &CSample::m_x);
printf("&m_y = %p\n", &CSample::m_y);
//s.*pc = 10;//s.*pc 实际上是s.m_x
pc = &CSample::m_y;//同上
//s.*pc = 20;//同上
//s.disp();
return 0;
}
除了类实例化后给成员分配内存外,还有其它方式。上面
&CSample::m_x &CSample::m_y
居然已经分配内存了,很怪异啊,下面是对应的汇编,有人帮忙解释吗?
//int CSample::*pc;//新增数据成员 注:通过这种方式我们很少这样做
//CSample s;
//pc = &CSample::m_x;//指针指向数据成员地址
printf("&m_x = %p\n", &CSample::m_x);
00411ADE mov esi,esp
00411AE0 push 0
00411AE2 push offset string "&m_x = %P\n" (4178F0h)
00411AE7 call dword ptr [__imp__printf (41A414h)]
00411AED add esp,8
00411AF0 cmp esi,esp
00411AF2 call @ILT+465(__RTC_CheckEsp) (4111D6h)