摘录原文:假设我们有一个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指针了???

解决方案 »

  1.   

    楼上你说的我知道 我只是不明白书中说"最后一个参数,(CDC *)&dc,其实就是this 指针"这句话是什么意思
    是不是书上写错了
      

  2.   

    可能他/她想說(CDC *)&dc就是這個對象的this指針
      

  3.   

    &dc返回這對象的地址, 即this指針
      

  4.   

    dc.EnumObjects(OBJ_BRUSH, EnumObjectsProc, NULL);换成类似C语言的写法就是(被编译器掩藏的C++面向对象真想)
    CDC::EnumObjects(OBJ_BRUSH, EnumObjectsProc, NULL, (CDC *)&dc);
    最后一个参数就是this指针(this指针为什么会是当前对象的原因)这段的意思是 obj.function()这种写法是语法糖,
    编译器会替你替换成 function(&obj)的方式,
    编译器会自动把this指针替换成形参 &obj 这是在面向过程级别去解释面向对象的原理, 
    差不多是这么回事, 但不是这么回事就是了.