有如下代码int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct )
{
if(CMDIFrameWnd::OnCreate(lpCreateStruct) == -1 )
return -1;
if(!m_wndToolBar.Create(this) || // 显式和隐式的this是同一个吗?
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME) )
//...
}
1)C++类的成员函数有个隐式的this指针,像上面那样显式使用this,这个this是指m_wndToolBar对象的地址还是CMainFrame对象的地址?
2)是不是还有个隐式的this指针和这个显式的不一样?
{
if(CMDIFrameWnd::OnCreate(lpCreateStruct) == -1 )
return -1;
if(!m_wndToolBar.Create(this) || // 显式和隐式的this是同一个吗?
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME) )
//...
}
1)C++类的成员函数有个隐式的this指针,像上面那样显式使用this,这个this是指m_wndToolBar对象的地址还是CMainFrame对象的地址?
2)是不是还有个隐式的this指针和这个显式的不一样?
2. 人家说得隐式是指在调用OnCreate时不需要在lpCreateStruct中指明this。你这里得看到得Create(this)这个this不是什么所谓得“显式”this指针,进入Create之后,this变为m_wndToolBar对象得指针,和你这里看到得this毫无关系也就是说:this指针进入不同参数,其值时不断变化得,它特指“当前函数所属类的当前实例的指针”
this不就是指CMainFrame对象的指针 什么时候变成m_wndToolBar对象的了???
============
他所说的,不是指在CMainFrame中的this指针变了,而是指,如果进入了Create之后,你再写this,这个this就指的是m_wndToolBar了,并不是说CMainFrame中的那个this变成了m_wndToolBar.
比如,你下面这段代码:
CMyDialog::OnOK()
{
...你在这里引用this,this就是指向一CMyDialog的对象。
}
CMainFrame::OnXXX()
{
在这里引用this,就是指向一CMainFrame对象。
}
总之,this到底指向什么是根据你引用它的位置决定的。
this指针永远都是本身隐含的,表示指向自己的指针。
没有什么隐式、显式之说。12楼才是正解。
class CFoo1;
class CFoo2
{
public:
void test(CFoo1 * p1);
};
class CFoo1
{
public:
void test1()
{
CFoo2 foo2;
foo2.test(this);//这里的this指的是CFoo1的一个实例
//进入foo2.test后,this就指得是foo2
};
};void CFoo2::test(CFoo1 * p) //注意:你这里不可能使用“this”,尽管上面调用时指定的时this
{
printf("%p\n", this);// 这里又是一个this,这个this和前面哪个this毫无关系
//它代表的时CFoo2的一个实例,也就是前面test1函数内的变量foo2
}