m_hWnd 和 this 指针的区别

参考博客地址:http://sochao.lofter.com/post/c5106_194cda

个人感觉,m_hWnd是所有从CWnd继承下来的窗口类都会有的一个成员变量,代表本窗口的句柄;this就是一个对象的指针,如果这个对象就是一个窗口,那么*this应该和m_hWnd一样吧。

测试代码:

 m_wndVertSplit.Create ( *this/*m_hWnd*/, rcDefault, NULL,dwSplitStyle, dwSplitExStyle );

结果一样。此时的看法比较肤浅,以后有时间dig一下。

不过,通过这篇文章明白了:之所以静态成员函数不能访问非静态变量,是因为没有对象指针this。

解释如下:

对于类成员函数而言,并不是一个对象对应一个单独的成员函数体,而是此类的所有对象共用这个成员函数体,即调用同一个代码段。   当对一个对象调用非静态成员函数时,编译程序会自动先将对象的地址赋给成员函数的this指针,即作为一个隐含参数传递给成员函数;然后每次非静态成员函数存取非静态数据成员时,由隐含使用this指针,即都会被转化为this->数据成员的方式。因此,当程序被编译之后,此成员函数地址即已确定。而成员函数之所以能把属于此类的各个对象的数据区别开, 就是靠this指针,也就是对于每一个类的非静态成员函数,都有一个隐含的this指针,该指针指向调用该成员函数的实例对象。

posted @ 2013-08-07 12:25  Tup  阅读(219)  评论(0)    收藏  举报