Melalui Penunjuk Fungsi Ahli dengan Objek Kelas
Apabila cuba menghantar fungsi ahli dalam kelas kepada fungsi luaran yang memerlukan fungsi ahli penunjuk, adalah penting untuk memahami langkah-langkah yang diperlukan. Artikel ini menangani senario tertentu di mana fungsi ahli kelas dihantar ke fungsi dalam kelas berasingan.
Dalam kod yang disediakan, kelas testMenu termasuk fungsi ahli dipanggil test2() dan MenuButton yang memanggil SetButton (). Cabarannya terletak pada lulus dengan betul penunjuk fungsi test2() menggunakan penuding ini.
Kunci untuk menyelesaikan isu ini adalah untuk menyediakan fungsi luaran dengan kedua-dua penunjuk ke objek dan penuding kepada fungsi khusus dalam objek itu. Dalam versi diubah suai MenuButton::SetButton():
template <class object> void MenuButton::SetButton(int xPos, int yPos, LPCWSTR normalFilePath, LPCWSTR hoverFilePath, LPCWSTR pressedFilePath, int Width, int Height, object *ButtonObj, void (object::*ButtonFunc)()) { BUTTON::SetButton(xPos, yPos, normalFilePath, hoverFilePath, pressedFilePath, Width, Height); this->ButtonObj = ButtonObj; this->ButtonFunc = ButtonFunc; }
Objek dan penunjuk fungsi disimpan dalam objek MenuButton. Fungsi itu kemudiannya boleh digunakan menggunakan kedua-dua penunjuk:
((ButtonObj)->*(ButtonFunc))();
Akhir sekali, dalam pembina kelas testMenu, apabila menetapkan MenuButton, adalah penting untuk menghantar penunjuk ke objek testMenu:
testMenu::testMenu() :MenuScreen("testMenu") { x.SetButton(100,100,TEXT("buttonNormal.png"), TEXT("buttonHover.png"), TEXT("buttonPressed.png"), 100, 40, this, test2); draw = false; }
Dengan memasukkan pengubahsuaian ini, penunjuk fungsi ahli boleh berjaya dilalui, membolehkan fungsi luaran mengakses dan melaksanakan fungsi ahli yang dikehendaki dalam kelas testMenu.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melewati Penunjuk Fungsi Ahli Kelas kepada Fungsi Luaran dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!