Rumah >pembangunan bahagian belakang >C++ >Mengapa `bigCat.*pcat()` Tidak Berfungsi Apabila Memanggil Fungsi Ahli Melalui Penunjuk?

Mengapa `bigCat.*pcat()` Tidak Berfungsi Apabila Memanggil Fungsi Ahli Melalui Penunjuk?

Linda Hamilton
Linda Hamiltonasal
2024-12-15 16:42:15675semak imbas

Why Doesn't `bigCat.*pcat()` Work When Calling Member Functions Through Pointers?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn