1. 主页 > 大智慧

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 func = &MyClass::cook;

MyClass myObj;
func(myObj); // 涓濇粦璋冪敤

//---------------------------------------
馃挜銆愬Э鍔夸簲锛歀ambda鍖呰娉曘€?0鍚庣殑鏂板疇
閫傚悎鍦烘櫙锛氶渶瑕佸揩閫熷垱寤轰复鏃跺嚱鏁板寘瑁呭櫒鏃?br/> 馃殌鎬ц兘鎻愮ず锛歭ambda鍦?O2浼樺寲涓嬪拰鏅€氬嚱鏁版棤寮?/p>

// 閰风偒鍐欐硶
auto lambda = [](MyClass &m){ m.cook(); };
MyClass quickMeal;
lambda(quickMeal);

//---------------------------------------
馃洜銆愰伩鍧戞寚鍗椼€戞柊鎵嬫渶甯歌俯鐨?涓浄鍖?/p>

  1. 璇曞浘鐩存帴璋冪敤鏈粦瀹氱殑鎴愬憳鍑芥暟 鈫?鎶ラ敊锛氬繀椤婚€氳繃瀵硅薄璋冪敤
  2. 鍦ㄤ复鏃跺璞′笂璋冪敤闈瀋onst鏂规硶 鈫?鎶ラ敊锛氶潪甯搁噺寮曠敤涓嶈兘缁戝畾涓存椂瀵硅薄
  3. 蹇樿delete new鍑烘潵鐨勫璞?鈫?鍐呭瓨娉勬紡璀﹀憡锛?/li>

// 閿欒绀鸿寖鉂?br/> MyClass().cook(); // 涓存椂瀵硅薄璋冪敤闈瀋onst鏂规硶
// 姝g‘濮垮娍鉁?br/> const MyClass().cook(); // 娣诲姞const淇グ

馃懆馃捇涓汉鏆磋锛氳櫧鐒秙td::function鍜宭ambda鐢ㄧ潃鐖斤紝浣嗗湪宓屽叆寮忓紑鍙戦噷杩樻槸鍘熷鎸囬拡鏇村悆棣欍€傛渶杩戝仛鏅鸿兘瀹跺眳椤圭洰鏃跺氨鍙戠幇锛岀敤function鍖呰鐨勫嚱鏁版瘮鐩存帴璋冪敤澶氭秷鑰椾簡2ms鍝嶅簲鏃堕棿鈥斺€斿瀹炴椂绯荤粺杩欏彲鏄鍛界殑浜嬶紒

鏈€鍚庢墧涓帇鐐哥煡璇嗭細C++23瑕佸姞鍏ョ殑"鏄惧紡瀵硅薄鍙傛暟"璇硶锛屼互鍚庡彲鑳界洿鎺ラ€氳繃鍑芥暟鍙傛暟浼犻€抰his瀵硅薄锛佷笉杩囩幇鍦ㄥ槢...鍜变滑杩樻槸鍏堟妸杩?绉嶅Э鍔跨粌鐔熷啀璇磣

本文由嘻道妙招独家原创,未经允许,严禁转载