Basisklassenfunktion lässt sich nicht aufrufen



  • Hallo

    Ich leite von einer bestehenden Klasse meine eigene Klasse ab. Darin will ich eine Funktion implementieren die genau gleich heißt wie die in der Basisklasse. Allerdings mit einer anderen Paramterliste.

    So nun dachte ich bisher immer dies Funktion ist nicht abgeleitet sondern eine neue Funktion. Oder nicht?

    Was mich denn wundert ist, wenn ich ein Objekt von der abgeleiteten Klasse anlege, kann ich nur noch die Funktion aus der abgeleiteten Klasse aufrufen nicht mehr die aus der Basisklasse.



  • na geht doch eigentlich so

    CBasisClass::BasisFunktion(....);
    

    also hatte so noch nie Probleme



  • Nein falsch verstanden

    Also Beispiel

    class Basisklasse
    {
       ...
    
       FunktionA(int a, int b);
    
       ...
    };
    
    class Abgeleitet : Basisklasse
    {
    
       ...
    
       FunktionA(CString a, CString b);
    
       ...
    }
    
    Abgeleitet objekt;
    
    objekt.FunktionA("eins","zwei"); // geht
    
    objekt.FunktionA(1,2); // geht nicht Compilerfehler
    

    Das was du gemeint hast war klar. Aber ich will von dem abgeleitetetn Objekt auf die Basisklasse zugreifen. Übrigens alle Funktionen public;



  • na das wird net gehen, weil du doch in deiner abgeleiteten Klasse die Funktion überschrieben hast. Was geht ist:

    class A
    {
    public:
    	int MachWas(int a,int b)
    	{
    		return a;
    	}
    };
    class B : public A
    {
    public:
    	CString MachWas(CString a)
    	{
    		return a;
    	}
    	int MachWas(int a,int b)
    	{
    		return A::MachWas(a,b);
    	}
    
    };
    

    als Beispiel. Wenn ich auf dem Holzweg bin kann mich ja jemand Berichtigen 😃



  • Ja genau das war ja das was ich gefragt habe. Ich habe die Funktion doch eigentlich nicht überschrieben, da ich eine andere Parameterliste habe dachte ich es wäre dann auch eine andere Funktion.



  • ne der Scope geht nur in der klasse aber net über mehrere Klassen (soweit ich weiss). Sonnst würde das, wenn deine klasse schon 30 mal abgeleidet würde ein heilloses durcheinander bringen 😃



  • @userDialog:
    Ist auch eine andere Funktion, bloss "verdeckt" die Funktion in der abgeleiteten Klasse sämtliche gleichnamigen Funktionen in der Basisklasse.
    Aufrufen kannst du die Funktionen der Basisklasse trotzdem, bloss musst du es explizit angeben:

    class Basisklasse
    {
       ...
    
       FunktionA(int a, int b);
    
       ...
    };
    
    class Abgeleitet : Basisklasse
    {
    
       ...
    
       FunktionA(CString a, CString b);
    
       ...
    }
    
    Abgeleitet objekt;
    
    objekt.FunktionA("eins","zwei"); // geht
    
    //objekt.FunktionA(1,2); // geht nicht Compilerfehler
    
    // Variante A:
    objekt.Basisklasse::FunktionA(1,2);
    
    // Variante B:
    static_cast<Basisklasse&>(objekt).FunktionA(1,2);
    


  • Achso. Alles Klar vielen Dank.


Anmelden zum Antworten