Warum muss eine überschriebene Funktion in der abgeleiteten Klasse blenden Sie die anderen überladungen der Basis-Klasse?

Betrachten Sie den code :

#include <stdio.h>

class Base {
public: 
    virtual void gogo(int a){
        printf(" Base :: gogo (int) \n");
    };

    virtual void gogo(int* a){
        printf(" Base :: gogo (int*) \n");
    };
};

class Derived : public Base{
public:
    virtual void gogo(int* a){
        printf(" Derived :: gogo (int*) \n");
    };
};

int main(){
    Derived obj;
    obj.gogo(7);
}

Habe diesen Fehler :

>g++ -pedantic-Os test.cpp -o test 
test.cpp: In function `int main()': 
test.cpp:31: Fehler: keine passende Funktion für Aufruf von " Abgeleitet::gogo(int)' 
test.cpp:21: Anmerkung: Kandidaten sind: virtual void Abgeleitet::gogo(int*) 
test.cpp:33:2: warning: no newline at end of file 
>Exit-code: 1 

Hier die Abgeleitete Klasse die Funktion ist überstrahlt alle Funktionen mit demselben Namen (nicht Unterschrift) in der Basisklasse. Irgendwie ist dieses Verhalten von C++ nicht sehen OK. Nicht polymorph.

Duplizieren: stackoverflow.com/questions/411103/...
geniale Frage, ich habe nur entdeckt das kürzlich zu
Ich denke, Bjarne (aus dem link, den Mac geschrieben) setzen Sie am besten in einem Satz: "In C++, es gibt keine überlastung über Bereiche abgeleitete Klasse Bereiche werden nicht eine Ausnahme zu dieser Allgemeinen Regel."
Link ist gebrochen. Hier ist die richtige (wie jetzt) - stroustrup.com/bs_faq2.html#overloadderived
Auch wollte darauf hinweisen, dass obj.Base::gogo(7); funktioniert immer noch durch den Aufruf der versteckten Funktion.

InformationsquelleAutor fizzbuzz | 2009-10-27

Schreibe einen Kommentar