Vererbung



  • Hallo,

    habe folgendes Problem:
    Ich habe eine Basisklasse, von der 3 Unterklassen abgeleitet werden.

    Nun ist in der Basisklasse u.a. folgende Funktion deklariert:

    virtual bool lesen (char *dateiname) abstract;

    In einer der drei Unterklassen möchte ich dieser Funktion nun noch einen weiteren Parameter übergeben. Diese sollte dann so aussehen:

    bool lesen (char *dateiname, Klasse *Objekt)

    Hat jemand ne Idee, wie ich das machen kann ohne das der Compiler Alarm schlägt?

    Grüße,
    Imiglikos



  • Wenn du eine virtuelle Methode neudefinieren willst, muß sie die selben Parameter haben wie in der Basisklasse (andernfalls würde es krachen, wenn du die Methode über eine Basiszeiger aufrufen willst). Aber du kannst natürlich noch zusätzlich weitere Überladungen definieren, wenn du willst:

    class base
    {
    public:
      virtual bool lesen (char *dateiname)=0;
    };
    
    class derived : public base
    {
    public:
      //neue Überladung der Methode
      virtual bool lesen (char *dateiname,Klasse*Objekt);
      //Redefinition der base::lesen()
      virtual bool lesen (char *dateiname)
      {
        Klasse dummy;
        return lesen(dateiname,&dummy);
      }
    };
    


  • Wenn ich das so mache, bekomme ich vom Compiler die Fehlermeldung und die Funktion dann aufrufe, bekomme ich vom Compiler die Fehlermeldung, dass die Funktion keine 2 Argumente akzeptiert.



  • Wenn du lesen(char*,Klass*) über einen Basisklassenzeiger/referenz aufrufst, ist es normal das der Compiler da meckert.

    In base gibt es kein lesen(char*,Klass*) bzw virtual lesen(char*,Klass*) wodurch der Compiler in der vtable nachschauen würde, um die Funktion aufrufen zu können.


Anmelden zum Antworten