Rumah >pembangunan bahagian belakang >C++ >Mengapa `bigCat.*pcat()` Tidak Berfungsi Apabila Memanggil Fungsi Ahli Melalui Penunjuk?
Fungsi Memanggil Melalui Penunjuk Fungsi Ahli
Apabila menggunakan penunjuk fungsi ahli, adalah penting untuk memastikan pemanggilan yang betul. Pertimbangkan kod sampel:
class cat { public: void walk() { printf("cat is walking \n"); } }; int main(){ cat bigCat; void (cat::*pcat)(); pcat = &cat::walk; bigCat.*pcat(); }
Walau bagaimanapun, ralat berlaku apabila cuba memanggil fungsi menggunakan bigCat.*pcat();. Ini kerana kurungan tambahan diperlukan dalam sintaks panggilan fungsi.
Sintaks Betul untuk Memanggil Penunjuk Fungsi Ahli
Untuk memanggil fungsi ahli dengan betul melalui penunjuk fungsi ahli, kurungan keutamaan pengendali mesti dipatuhi. Sintaks yang betul untuk panggilan fungsi ialah:
(bigCat.*pcat)();
Ini memastikan bahawa operator panggilan fungsi (()) mempunyai keutamaan yang lebih tinggi daripada operator mengikat penunjuk kepada ahli (.*). Pengendali unary umumnya mempunyai keutamaan berbanding pengendali binari. Oleh itu, kurungan diperlukan untuk menyatakan secara eksplisit bahawa fungsi ahli walk() sedang dipanggil pada objek bigCat.
Dengan sintaks yang diperbetulkan, kod akan berjaya melaksanakan dan mencetak "cat is walking n" ke konsol.
Atas ialah kandungan terperinci Mengapa `bigCat.*pcat()` Tidak Berfungsi Apabila Memanggil Fungsi Ahli Melalui Penunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!