Rumah > pembangunan bahagian belakang > C++ > Mengapa saya perlu menggunakan `b->A::DoSomething()` dan bukannya `b->DoSomething()` apabila memanggil kaedah daripada kelas induk dalam C ?

Mengapa saya perlu menggunakan `b->A::DoSomething()` dan bukannya `b->DoSomething()` apabila memanggil kaedah daripada kelas induk dalam C ?

DDD
Lepaskan: 2024-11-03 08:30:29
asal
691 orang telah melayarinya

Why do I need to use `b->A::DoSomething()` dan bukannya `b->DoSomething()` apabila memanggil kaedah daripada kelas induk dalam C ? 
A::DoSomething()` bukannya `b->DoSomething()` apabila memanggil kaedah daripada kelas induk dalam C ? " />

C Overload Resolution for Skop Konflik

Coretan kod yang disediakan menggambarkan cabaran biasa dalam C overload resolusi apabila dua kaedah dengan nama yang sama wujud dalam skop berbeza . Dalam senario ini, pengkompil bergantung pada peraturan keterlihatan skop untuk menentukan kaedah yang berkenaan.

Masalah:

Apabila menggunakan kaedah DoSomething pada contoh kelas B , mengapakah perlu menggunakan b->A::DoSomething() secara eksplisit dan bukannya b->DoSomething()?

Jawapan:

The pengkompil lalai untuk mempertimbangkan skop nama terkecil yang mungkin, dan dalam kes ini, ia hanya mengenali kaedah DoSomething yang ditakrifkan dalam kelas B. Memandangkan senarai argumen tidak sepadan dengan tandatangan kaedah ini, pengkompil mengeluarkan ralat.

Kepada selesaikan isu skop ini, terdapat dua pendekatan:

Resolusi Skop Eksplisit:

Tentukan secara eksplisit skop kaedah yang diingini menggunakan sintaks b->A:: DoSomething(), yang memaksa pengkompil mengenali kaedah yang ditakrifkan dalam kelas A.

Mewarisi Skop:

Gunakan arahan penggunaan untuk membawa kaedah yang diingini ke dalam skop daripada kelas terbitan. Contohnya:

<code class="cpp">class B : public A {
public:
    using A::DoSomething;
    // ...
}</code>
Salin selepas log masuk

Dengan menggunakan salah satu daripada kaedah ini, anda boleh memastikan bahawa pengkompil menyelesaikan beban berlebihan dengan betul dan menggunakan kaedah DoSomething yang dimaksudkan.

Atas ialah kandungan terperinci Mengapa saya perlu menggunakan `b->A::DoSomething()` dan bukannya `b->DoSomething()` apabila memanggil kaedah daripada kelas induk dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan