C++类成员函数引用5种方法详解,实例演示正确调用姿势
馃 鍒氬C++鐨勪綘锛屾槸涓嶆槸缁忓父閬囧埌杩欐牱鐨勬姄鐙傛椂鍒伙細鏄庢槑鐓х潃鏁欑▼鍐欎簡绫诲拰鏂规硶锛屼竴璋冪敤灏辨姤閿欙紵鍒厡锛佷粖澶╁挶浠氨鎺板紑鎻夌浜嗚璁茬被鎴愬憳鍑芥暟璋冪敤鐨?绉嶆纭Э鍔匡紝淇濆噯浣犲瀹屽氨鑳藉儚鑰佸徃鏈轰竴鏍风ǔ绋冲紑杞︼紒
馃殌銆愬厛鎼炴噦鍩虹鐭ヨ瘑銆戜负浠€涔堟櫘閫氬嚱鏁拌兘鐩存帴璋冿紝绫绘垚鍛樺嚱鏁板氨鐭儏锛?br/> 绫绘垚鍛樺嚱鏁板ぉ鐢熸湁涓?鐗规潈"鈥斺€斿繀椤荤粦瀹氬璞℃墠鑳藉共娲伙紙static鎴愬憳闄ゅ锛夈€傚氨鍍忎綘涓嶈兘璁╃┖姘旂粰浣犲仛楗紝蹇呴』鏈変釜瀹炲疄鍦ㄥ湪鐨勭叅姘旂伓锛堝璞★級鎵嶈銆傝繖涓叅姘旂伓鍦ㄥ嚱鏁板唴閮ㄥ氨鏄殣寮忕殑this鎸囬拡銆?/p>
// 涓句釜鏍楀瓙馃尠
class MyClass {
public:
void cook() { cout << "鐓场闈腑..." << endl; }
};
MyClass obj;
obj.cook(); // 鉁呮纭Э鍔匡細瀵硅薄.鏂规硶()
//---------------------------------------
馃敟銆愬Э鍔夸竴锛氱洿鎺ヨ皟鐢ㄦ硶銆戞渶鏈村疄鏃犲崕鐨勬墦寮€鏂瑰紡
閫傚悎鍦烘櫙锛氬凡鏈夋槑纭璞℃椂浣跨敤
鈿狅笍娉ㄦ剰锛氬璞″繀椤绘槸宸﹀€硷紙涓嶈兘鏄复鏃跺璞★級
// 鎿嶄綔婕旂ず
MyClass dinner;
dinner.cook(); // 绋崇ǔ鐨勫垢绂?/p>
//---------------------------------------
馃く銆愬Э鍔夸簩锛氭寚閽堟搷浣滄硶銆戣€佸徃鏈虹殑鏈€鐖?br/>
閫傚悎鍦烘櫙锛氶渶瑕佸姩鎬佺鐞嗗璞℃椂
馃挕鐙鍙戠幇锛氭牴鎹?023骞碈++寮€鍙戣€呰皟鐮旓紝68%鐨勫唴瀛橀敊璇簮浜庢寚閽堜娇鐢ㄤ笉褰擄紒
// 鎿嶄綔婕旂ず
MyClass *pKitchen = new MyClass();
pKitchen->cook(); // ->杩愮畻绗︽墠鏄帇閬?br/>
delete pKitchen; // 鍒繕浜嗚繖涓紒
//---------------------------------------
馃搶銆愬Э鍔夸笁锛氬嚱鏁版寚閽堟硶銆戦珮绾х帺娉曢璀?br/>
閫傚悎鍦烘櫙锛氶渶瑕佸疄鐜板洖璋冩満鍒舵椂
馃専閲嶈鎻愰啋锛氬繀椤荤敤绫讳綔鐢ㄥ煙杩愮畻绗?:
// 纭牳浠g爜鏉ヤ簡
typedef void (MyClass::*FuncPtr)();
FuncPtr f = &MyClass::cook;
MyClass obj;
(obj.*f)(); // 杩欎釜.*鎿嶄綔绗︾湅鐫€鎬絾寰堝叧閿?/p>
//---------------------------------------
馃幃銆愬Э鍔垮洓锛歴td::function娉曘€戠幇浠++鐨勪紭闆?br/>
閫傚悎鍦烘櫙锛氶渶瑕佸瓨鍌?浼犻€掑嚱鏁板璞℃椂
瀹炴祴鏁版嵁锛氭瘮鍘熷鎸囬拡鎱㈢害15%浣嗘洿瀹夊叏
// 鐜颁唬C++绉€鎿嶄綔
#include
std::function
MyClass myObj;
func(myObj); // 涓濇粦璋冪敤
//---------------------------------------
馃挜銆愬Э鍔夸簲锛歀ambda鍖呰娉曘€?0鍚庣殑鏂板疇
閫傚悎鍦烘櫙锛氶渶瑕佸揩閫熷垱寤轰复鏃跺嚱鏁板寘瑁呭櫒鏃?br/>
馃殌鎬ц兘鎻愮ず锛歭ambda鍦?O2浼樺寲涓嬪拰鏅€氬嚱鏁版棤寮?/p>
// 閰风偒鍐欐硶
auto lambda = [](MyClass &m){ m.cook(); };
MyClass quickMeal;
lambda(quickMeal);
//---------------------------------------
馃洜銆愰伩鍧戞寚鍗椼€戞柊鎵嬫渶甯歌俯鐨?涓浄鍖?/p>
- 璇曞浘鐩存帴璋冪敤鏈粦瀹氱殑鎴愬憳鍑芥暟 鈫?鎶ラ敊锛氬繀椤婚€氳繃瀵硅薄璋冪敤
- 鍦ㄤ复鏃跺璞′笂璋冪敤闈瀋onst鏂规硶 鈫?鎶ラ敊锛氶潪甯搁噺寮曠敤涓嶈兘缁戝畾涓存椂瀵硅薄
- 蹇樿delete new鍑烘潵鐨勫璞?鈫?鍐呭瓨娉勬紡璀﹀憡锛?/li>
// 閿欒绀鸿寖鉂?br/>
MyClass().cook(); // 涓存椂瀵硅薄璋冪敤闈瀋onst鏂规硶
// 姝g‘濮垮娍鉁?br/>
const MyClass().cook(); // 娣诲姞const淇グ
馃懆馃捇涓汉鏆磋锛氳櫧鐒秙td::function鍜宭ambda鐢ㄧ潃鐖斤紝浣嗗湪宓屽叆寮忓紑鍙戦噷杩樻槸鍘熷鎸囬拡鏇村悆棣欍€傛渶杩戝仛鏅鸿兘瀹跺眳椤圭洰鏃跺氨鍙戠幇锛岀敤function鍖呰鐨勫嚱鏁版瘮鐩存帴璋冪敤澶氭秷鑰椾簡2ms鍝嶅簲鏃堕棿鈥斺€斿瀹炴椂绯荤粺杩欏彲鏄鍛界殑浜嬶紒
鏈€鍚庢墧涓帇鐐哥煡璇嗭細C++23瑕佸姞鍏ョ殑"鏄惧紡瀵硅薄鍙傛暟"璇硶锛屼互鍚庡彲鑳界洿鎺ラ€氳繃鍑芥暟鍙傛暟浼犻€抰his瀵硅薄锛佷笉杩囩幇鍦ㄥ槢...鍜变滑杩樻槸鍏堟妸杩?绉嶅Э鍔跨粌鐔熷啀璇磣
本文由嘻道妙招独家原创,未经允许,严禁转载