av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

C++成員函數(shù)指針詳細(xì)使用指南

我們?cè)?jīng)在一篇文章中為大家詳細(xì)介紹了有關(guān)C++函數(shù)指針的相關(guān)問(wèn)題,那么今天大家將會(huì)進(jìn)一步對(duì)這方面的知識(shí)有一個(gè)充分的掌握。在C++程序中,很多函數(shù)是成員函數(shù),即這些函數(shù)是某個(gè)類中的一部分。你不可以像一個(gè)普通的函數(shù)指針那樣指向一個(gè)成員函數(shù),正確的做法應(yīng)該是,你必須使用一個(gè)成員函數(shù)指針。一個(gè)成員函數(shù)的指針指向類中的一個(gè)成員函數(shù),并和以前有相同的參數(shù),聲明如下:

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、虎丘網(wǎng)站維護(hù)、網(wǎng)站推廣。

 
 
 
  1. float (SomeClass::*my_memfunc_ptr)(int, char *); 

對(duì)于使用const關(guān)鍵字修飾的成員函數(shù),聲明如下:

 
 
 
  1. float (SomeClass::*my_const_memfunc_ptr)(int, char *) const; 

#t#注意使用了特殊的運(yùn)算符(::*),而“SomeClass”是聲明中的一部分。C++成員函數(shù)指針有一個(gè)可怕的限制:它們只能指向一個(gè)特定的類中的成員函數(shù)。對(duì)每一種參數(shù)的組合,需要有不同的成員函數(shù)指針類型,而且對(duì)每種使用const修飾的函數(shù)和不同類中的函數(shù),也要有不同的函數(shù)指針類型。在MSVC中,對(duì)下面這四種調(diào)用方式都有一種不同的調(diào)用類型:

__cdecl, __stdcall, __fastcall, 和 __thiscall。

(__thiscall是缺省的方式,有趣的是,在任何官方文檔中從沒(méi)有對(duì)__thiscall關(guān)鍵字的詳細(xì)描述,但是它經(jīng)常在錯(cuò)誤信息中出現(xiàn)。如果你顯式地使用它,你會(huì)看到“它被保留作為以后使用(it is reserved for future use)”的錯(cuò)誤提示。)

如果你使用了C++成員函數(shù)指針,你***使用typedef以防止混淆。將函數(shù)指針指向型如float SomeClass::some_member_func(int, char *)的函數(shù),你可以這樣寫(xiě):

 
 
 
  1. my_memfunc_ptr = &SomeClass::some_member_func; 

很多編譯器(比如MSVC)會(huì)讓你去掉“&”,而其他一些編譯器(比如GNU G++)則需要添加“&”,所以在手寫(xiě)程序的時(shí)候我建議把它添上。若要調(diào)用成員函數(shù)指針,你需要先建立SomeClass的一個(gè)實(shí)例,并使用特殊操作符“->*”,這個(gè)操作符的優(yōu)先級(jí)較低,你需要將其適當(dāng)?shù)胤湃雸A括號(hào)內(nèi)。

 
 
 
  1. SomeClass *x = new SomeClass;  
  2. (x->*my_memfunc_ptr)(6, "Another Arbitrary Parameter"); 

 

如果類在棧上,你也可以使用“.*”運(yùn)算符。

 
 
 
  1. SomeClass y;  
  2. (y.*my_memfunc_ptr)(15, "Different parameters this time"); 

 

不要怪我使用如此奇怪的語(yǔ)法——看起來(lái)C++的設(shè)計(jì)者對(duì)標(biāo)點(diǎn)符號(hào)有著由衷的感情!C++相對(duì)于C增加了三種特殊運(yùn)算符來(lái)支持成員指針。“::*”用于指針的聲明,而“->*”和“.*”用來(lái)調(diào)用指針指向的函數(shù)。這樣看起來(lái)對(duì)一個(gè)語(yǔ)言模糊而又很少使用的部分的過(guò)分關(guān)注是多余的。(你當(dāng)然可以重載“->*”這些運(yùn)算符,但這不是本文所要涉及的范圍。)

一個(gè)C++成員函數(shù)指針可以被設(shè)置成0,并可以使用“==”和“!=”比較運(yùn)算符,但只能限定在同一個(gè)類中的成員函數(shù)的指針之間進(jìn)行這樣的比較。任何成員函數(shù)指針都可以和0做比較以判斷它是否為空。與函數(shù)指針不同,不等運(yùn)算符(<, >, <=, >=)對(duì)C++成員函數(shù)指針是不可用的。


網(wǎng)站標(biāo)題:C++成員函數(shù)指針詳細(xì)使用指南
轉(zhuǎn)載注明:http://uogjgqi.cn/article/djsiocs.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流