Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menyelesaikan Perlanggaran Nama Fungsi dalam Warisan C?

Bagaimanakah Saya Boleh Menyelesaikan Perlanggaran Nama Fungsi dalam Warisan C?

Patricia Arquette
Patricia Arquetteasal
2024-12-21 16:02:10941semak imbas

How Can I Resolve Function Name Collision in C   Inheritance?

Perlanggaran Fungsi dalam Kelas Terbitan

Apabila mentakrifkan fungsi dengan nama yang sama tetapi tandatangan berbeza dalam kelas asas dan kelas terbitannya, a Isu carian nama boleh timbul.

Pertimbangkan perkara berikut kod:

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

Dalam contoh ini, pengkompil menimbulkan ralat apabila cuba mengakses fungsi foo() daripada kelas asas A dalam fungsi bar() kelas C. Ini kerana pencarian nama mengutamakan pencarian fungsi dalam kelas paling terdekat, dalam kes ini, B, dan mengabaikan fungsi yang ditindih dalam A.

Untuk menyelesaikan isu ini, kelas terbitan B mesti mengisytiharkan secara eksplisit fungsi yang diganti menggunakan arahan penggunaan:

class B : public A
{
public:
    int foo(int i){};
    using A::foo;
};

Dengan menggunakan arahan penggunaan, B memperkenalkan semula fungsi foo() secara berkesan daripada A ke dalam skopnya sendiri, menjadikannya kelihatan kepada terbitan berikutnya kelas seperti C.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyelesaikan Perlanggaran Nama 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