A::DoSomething()` Daripada `b->DoSomething()` dalam Kod C Ini? " />
C Overload Resolution
Dalam contoh kod yang diberikan, pengkompil memerlukan penggunaan eksplisit b->A::DoSomething() dan bukannya b ->DoSomething() disebabkan oleh konsep "resolusi lebihan".
Resolusi lebihan beban menentukan fungsi lebihan yang dipanggil berdasarkan jenis dan bilangan argumen Dalam kes ini, pengkompil mempertimbangkan kaedah DoSomething(. ) dalam skop kelas B terlebih dahulu Memandangkan terdapat kaedah dengan nama dan parameter yang sama dalam B, pengkompil cuba menyelesaikan lebihan dalam B.
Walau bagaimanapun, kaedah DoSomething() dalam A ialah. juga lebihan beban yang sah. Untuk mengakses lebihan ini secara eksplisit, operator skop :: digunakan untuk menentukan bahawa kaedah DoSomething() tergolong dalam kelas asas A.
Satu penyelesaian yang mungkin untuk mengelakkan isu ini ialah " tarik ke bawah" beban lampau daripada A ke dalam skop B menggunakan kata kunci menggunakan. Ini secara berkesan membenarkan akses kepada A::DoSomething() terus dalam B. Berikut ialah contoh:
<code class="cpp">class B : public A { public: using A::DoSomething; // Additional methods or members };</code>
Sekarang, dalam skop daripada B, kaedah DoSomething() boleh dipanggil tanpa awalan A::, kerana ia dianggap sebagai beban berlebihan dalam B disebabkan arahan penggunaan.
Atas ialah kandungan terperinci Mengapa Pengkompil Memerlukan `b->A::DoSomething()` Daripada `b->DoSomething()` dalam Kod C Ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!