m_hwnd
① m_hwnd這個成員變數,最早是定義在類cwnd中,而且是類cwnd的第乙個資料成員,
先看一下msdn的解析:
the handle of the windows window attached to this cwnd. the m_hwnd data member is a
public variable of type hwnd.
由此可知,它是視窗類的乙個控制代碼,凡是從cwnd派生的類都有這個控制代碼,凡是以cwnd派
生的類定義的物件內部也都有這個控制代碼,它是類或者物件標識自己的控制代碼。
凡是視窗都有乙個控制代碼用來標識自己,在cwnd類中將這個控制代碼作為乙個成員變數直接封裝
了,所以cwnd類的成員函式都沒有控制代碼這個引數了,比如::showwindow(hwnd hwnd),在
cwnd類或者派生類中,這個函式就沒有引數了,cwnd::showwindow(),其實這個函式實
現很簡單,就是呼叫了::showwindow(hwnd hwnd),因為在類裡已經封裝好了,所以也不需
要在傳遞引數了。
② 哪如何獲得視窗類的自己的控制代碼呢?有如下方法:
1、this->m_hwnd;
2、getsafehwnd();
3、afxgetmainwnd()->m_hwnd;
this
① 對於類成員函式而言,並不是乙個物件對應乙個單獨的成員函式體,而是此類的所有對
象共用這個成員函式體,即呼叫同乙個**段
當對乙個物件呼叫非靜態成員函式時,編譯程式會自動先將物件的位址賦給成員函式的
this指標,即作為乙個隱含引數傳遞給成員函式;然後每次非靜態成員函式訪問非靜態資料
成員時,由隱含使用this指標,即都會被轉化為this->資料成員的方式。
。當程式被編譯之後,此成員函式位址即已確
定。而成員函式之所以能把屬於此類的各個物件的資料區別開, 就是靠this指標,也就是對
於每乙個類的非靜態成員函式,都有乙個隱含的this指標,該指標指向呼叫該成員函式的實
例物件。
② 乙個物件的this指標並不是物件本身的一部分,不會影響sizeof("物件")的結果;它是一
個隱含於每乙個類的成員函式中的特殊指標。它指向正在被該成員函式操作的那個物件。
③ 在c++中,this指標被隱含地宣告為: x *const this,這意味著不能給this 指標賦值;在x
類的const成員函式中,this指標的型別為:const x* const, 這說明this指標所指向的這種對
象是不可修改的(即不能對這種物件的資料成員進行賦值操作);
④ 由於this並不是乙個常規變數,所以,不能取得this的位址。
⑤顯式引用this指標的地方:
1、在類的非靜態成員函式中返回類物件本身的時候,直接使用
return *this;
2、為避免對同一物件進行賦值操作,例如在過載運算子"="時,如:
classtext& operator = (const classtext& instance)
m_nsize = instance.m_nsize;
if(null != m_pbuffer)
m_pbuffer = new char[max_path];
if(null != m_pbuffer )
return *this;
} 3、當形式引數與成員變數名相同時,如
this->n = n (不能寫成n = n),否則無法實現對成員
變數的賦值操作;
當然了,對於靜態成員的訪問,就不需要通過this進行訪問了,只要在函式名字前加上類
名限定符即可,這也就是為什麼靜態函式無法訪問非靜態成員了(沒有物件指標,如何訪問
其成員變數?),靜態成員函式自然能訪問靜態成員變數。因些說:靜態成員變數實際上就
是一種有訪問限制的全域性變數而已。從類的外部訪問靜態成員變數,前面需要加上類名限定
符。
指標和指標應用的區別
指標引數的傳遞,傳遞的是對指標的拷貝值,如果在函式中對指標的值進行修改,不會影響到主函式中的值,因為在函式執行完成後,執行這個函式產生區域性變數的棧區就會清空.指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體...
傳指標和傳指標引用的區別 指標和引用的區別(本質)
指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...
傳指標和傳指標引用的區別 指標和引用的區別(本質)
指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...