| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1418 人关注过本帖
标题:每个类对象都有一个this指针,那程序怎么知道this究竟指向谁呢?(新手问)
只看楼主 加入收藏
wwwjw
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-28
结帖率:33.33%
收藏
已结贴  问题点数:10 回复次数:5 
每个类对象都有一个this指针,那程序怎么知道this究竟指向谁呢?(新手问)
int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CView::OnCreate(lpCreateStruct) == -1)
        return -1;
   
    // TODO: Add your specialized creation code here
    m_btn.Create("按钮",WS_CHILD | WS_VISIBLE| BS_AUTO3STATE,CRect(0,0,100,100),this,123);
    return 0;
}


这是一个很简单的MFC程序,就是在一个单文档应用程序的视图窗口上产生一个按钮,以上是实现代码。
CButton::Create
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
第四个参数应该是这个按钮附属于哪个父窗口的指针。程序中直接用了this,说这个this就直接指向了CTestView。

既然每个类对象产生后都有一个自己的this指针,那在“m_btn.Create("按钮",WS_CHILD | WS_VISIBLE| BS_AUTO3STATE,CRect(0,0,100,100),this,123);
”这行代码的第四个参数中,为什么this就指向CTestView,而不是我的CButton对象m_btn呢?

加入我之前还有定义的其他类对象,this指针岂不更多,我怎么知道用this的时候,this究竟指向谁呢?


另外,在网上搜索时看到一段话:
“读者可能觉得this指针在编程时没有实际意义。实际上,this指针在Windows编程中却是相当有用的。例如,当用其他类的成员函数时,如果想得到主调用函数的对象的句柄(如Window中的窗口、控件、设备或文件等),可以使用this指针。因为在其他类的成员函数中,主调用函数的对象不在作用域内,而this指针可用来作句柄”

怎么理解最后一句话呢?
烦高人详解,提前道声谢了!
搜索更多相关主题的帖子: 指针 对象 
2010-06-22 10:32
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:5 
比如用this作为函数参数

★★★★★为人民服务★★★★★
2010-06-22 13:03
wwwjw
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-28
收藏
得分:0 
回复 2楼 cnfarer
能麻烦斑竹说的详细些吗?
2010-06-22 13:53
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
其实,你的理解并没有问题。你的问题好像是,用了很多this那么它们是如何区分的。为什么这个this说是指这个对象而不是那个?其实你只要清楚两点:
1.this的作用域(这个this就像你在不同的函数中可以定义同名的变量一样)
2.this只是一个指针(只不过是指向当前对象的指针而已,本质上讲,它与一般的指针无异)

★★★★★为人民服务★★★★★
2010-06-23 08:51
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:5 
谢谢版主的热心解答
受教了
2010-06-23 08:51
wwwjw
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-28
收藏
得分:0 
已解决,谢谢斑竹,
2010-06-24 18:09
快速回复:每个类对象都有一个this指针,那程序怎么知道this究竟指向谁呢?(新手 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035145 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved