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
Patricia Arquetteasal
2024-12-22 10:33:45238semak imbas

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); } };

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); } };

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!

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