Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menyelesaikan Isu Bayangan Fungsi dalam Warisan C?

Bagaimanakah Saya Boleh Menyelesaikan Isu Bayangan Fungsi dalam Warisan C?

Patricia Arquette
Lepaskan: 2024-12-22 10:33:45
asal
215 orang telah melayarinya

How Can I Resolve Function Shadowing Issues in C   Inheritance?

Kekecewaan Membayangi Fungsi: Mencari Fungsi yang Hilang dengan Tandatangan Berbeza

Dalam pengaturcaraan berorientasikan objek, konflik penamaan antara kelas asas dan turunan boleh timbul apabila fungsi dengan nama yang sama tetapi tandatangan berbeza wujud. Ini boleh menyebabkan kekeliruan dan tingkah laku yang tidak dijangka semasa pelaksanaan kod. Senario sedemikian berlaku dalam kod berikut:

class A { public: void foo(string s); };
class B : public A { public: int foo(int i); };
class C : public B { public: void bar() { string s; foo(s); } };
Salin selepas log masuk

Apabila cuba menyusun kod ini, ralat berlaku disebabkan ketidakupayaan untuk mencari fungsi C::foo(std::string&) apabila memanggil foo (s) dalam kaedah bar. Walaupun wujud foo(rentetan s) dalam kelas asas A, foo(int i) yang diwarisi dalam kelas B membayangi fungsi kelas asas.

Untuk menyelesaikan isu ini dan menjadikan fungsi yang diingini boleh diakses, fungsi daripada kelas asas mesti diisytiharkan semula secara eksplisit dalam skop kelas terbitan. Ini memastikan bahawa kedua-dua fungsi boleh dilihat dari dalam kelas terbitan dan keturunannya:

class A { public: void foo(string s); };
class B : public A { public: int foo(int i); using A::foo; };
class C : public B { public: void bar() { string s; foo(s); } };
Salin selepas log masuk

Adalah penting untuk ambil perhatian bahawa carian nama dalam skop kelas mengutamakan pengisytiharan dari dalam kelas semasa dan menghapuskan pengisytiharan tersembunyi daripada sub kelas asas -objek. Oleh itu, pengenalan fungsi dengan nama yang sama tetapi tandatangan yang berbeza dalam kelas terbitan boleh mengaburkan fungsi kelas asas, yang membawa kepada ralat yang diterangkan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyelesaikan Isu Bayangan Fungsi dalam Warisan 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan