摘录原文:假设我们有一个CMyclass 如下
class CMyclass {
private :
int nCount;
int CALLBACK _export
EnumObjectsProc(LPSTR lpLogObject, LPSTR lpData);
public :
void enumIt(CDC& dc);
}
void CMyclass::enumIt(CDC& dc)
{
dc.EnumObjects(OBJ_BRUSH, EnumObjectsProc, NULL);
}C++ 编译器针对CMyclass::enumIt 实际做出来的码相当于:
// 注册callback 函数
void CMyclass::enumIt(CDC& dc)
{
CDC::EnumObjects(OBJ_BRUSH, EnumObjectsProc,
NULL, (CDC *)&dc);
}
你所看到的最后一个参数,(CDC *)&dc,其实就是this 指针。
///////////////////////////////////////////////////////////
问题出在最后一句话 (CDC *)&dc怎么变成this指针了???
class CMyclass {
private :
int nCount;
int CALLBACK _export
EnumObjectsProc(LPSTR lpLogObject, LPSTR lpData);
public :
void enumIt(CDC& dc);
}
void CMyclass::enumIt(CDC& dc)
{
dc.EnumObjects(OBJ_BRUSH, EnumObjectsProc, NULL);
}C++ 编译器针对CMyclass::enumIt 实际做出来的码相当于:
// 注册callback 函数
void CMyclass::enumIt(CDC& dc)
{
CDC::EnumObjects(OBJ_BRUSH, EnumObjectsProc,
NULL, (CDC *)&dc);
}
你所看到的最后一个参数,(CDC *)&dc,其实就是this 指针。
///////////////////////////////////////////////////////////
问题出在最后一句话 (CDC *)&dc怎么变成this指针了???
是不是书上写错了
CDC::EnumObjects(OBJ_BRUSH, EnumObjectsProc, NULL, (CDC *)&dc);
最后一个参数就是this指针(this指针为什么会是当前对象的原因)这段的意思是 obj.function()这种写法是语法糖,
编译器会替你替换成 function(&obj)的方式,
编译器会自动把this指针替换成形参 &obj 这是在面向过程级别去解释面向对象的原理,
差不多是这么回事, 但不是这么回事就是了.