Heim > Backend-Entwicklung > C++ > Wie kann ich eine Funktionsnamenkollision bei der C-Vererbung lösen?

Wie kann ich eine Funktionsnamenkollision bei der C-Vererbung lösen?

Patricia Arquette
Freigeben: 2024-12-21 16:02:10
Original
938 Leute haben es durchsucht

How Can I Resolve Function Name Collision in C   Inheritance?

Funktionskollision in abgeleiteter Klasse

Beim Definieren einer Funktion mit demselben Namen, aber unterschiedlicher Signatur in einer Basisklasse und ihrer abgeleiteten Klasse, a Es kann zu Problemen bei der Namenssuche kommen.

Beachten Sie den folgenden Code:

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);
    }
};
Nach dem Login kopieren

In diesem Beispiel ist der Der Compiler löst einen Fehler aus, wenn er versucht, auf die Funktion foo() aus der Basisklasse A innerhalb der Funktion bar() der Klasse C zuzugreifen. Dies liegt daran, dass die Namenssuche das Finden der Funktion in der unmittelbarsten Klasse, in diesem Fall B, priorisiert und übersieht die überschriebene Funktion in A.

Um dieses Problem zu beheben, muss die abgeleitete Klasse B die überschriebene Funktion explizit mit der using-Direktive deklarieren:

class B : public A
{
public:
    int foo(int i){};
    using A::foo;
};
Nach dem Login kopieren

Durch die Verwendung von using Mit der Direktive führt B die foo()-Funktion von A effektiv wieder in seinen eigenen Bereich ein und macht sie für nachfolgende abgeleitete Klassen wie C sichtbar.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Funktionsnamenkollision bei der C-Vererbung lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage