rein virtual function



  • es ist keine exception! es ist ein compier-fehler!



  • virtual void Write(void* buf, int size) = 0; //pure virtual funktion für alle abgeleiteten klassen

    virtual void Write(void* buf, int size); //hier kannst du das 'virtual' auch entfernen

    wozu wird die funktion überhaupt als 'pure virtual' von dir deklariert? nimm die '=0' weg und vielleicht funzt es. habe es nicht probiert, versuch es einfach. 🙂



  • hi!

    mir leutet nicht ein warum auch der konstruktor:

    virtual ~Base () = 0;
    

    cu



  • sorry destruktor!

    cu



  • cpp. schrieb:

    hi!

    mir leutet nicht ein warum auch der konstruktor:

    virtual ~Base () = 0;
    

    cu

    Damit man von der Basisklasse keine Instanzen erzeugen kann.



  • ich dachte immer, man kann von Klassen mit rein virtuellen Funktionen sowieso keine Instanzen erstellen 😕 Und wenn die abgeleitete Klasse keinen Destruktor definiert, dann kann man von dieser ja eigentlich auch keine Instanz erstellen. Oder seh ich das falsch?
    geloescht



  • es gibt immer nen default dtor



  • geloescht schrieb:

    ich dachte immer, man kann von Klassen mit rein virtuellen Funktionen sowieso keine Instanzen erstellen 😕 Und wenn die abgeleitete Klasse keinen Destruktor definiert, dann kann man von dieser ja eigentlich auch keine Instanz erstellen. Oder seh ich das falsch?
    geloescht

    Es ist wohl sinnlos den Destruktor rein virtuell zu machen. Wenn die Derived Klasse keinen eigenen definert, generiert der Kompiler automatisch einen. Andererseits muß man immer auch den Destruktor der Basisklasse definieren, da man die Objekte nicht abbauen kann, wenn der Destruktor fehlt. Das bemängelt der Kompiler spätestens beim Linken.



  • Es ist wohl sinnlos den Destruktor rein virtuell zu machen.

    den dtor pure virtual zu machen ist spätestens dann sinnvoll, wenn man eine Klasse hat, die nur vererbt werden können soll, aber man keinen passenden kandidaten für eine pure virtual methode hat. der dtor ist in dem fall eine sinnvolle alternative.



  • otze schrieb:

    Es ist wohl sinnlos den Destruktor rein virtuell zu machen.

    den dtor pure virtual zu machen ist spätestens dann sinnvoll, wenn man eine Klasse hat, die nur vererbt werden können soll, aber man keinen passenden kandidaten für eine pure virtual methode hat. der dtor ist in dem fall eine sinnvolle alternative.

    gut von hume sikkins kopiert 👍 👎 👍



  • kopiert? selbst geschrieben.

    das wissen kommt aber von hume, da haste recht.



  • otze schrieb:

    Es ist wohl sinnlos den Destruktor rein virtuell zu machen.

    den dtor pure virtual zu machen ist spätestens dann sinnvoll, wenn man eine Klasse hat, die nur vererbt werden können soll, aber man keinen passenden kandidaten für eine pure virtual methode hat. der dtor ist in dem fall eine sinnvolle alternative.

    Ok, mit solchen Klassen musste ich mich noch nicht abgeben und ich wüsste auch nicht wann dies der Fall sein könnte.



  • hi!
    hier auch ein schönes beispiel zu diesem thema!;-) so wird meinstens ne abstrakte klasse eingesetzt?

    cu

    class Mensch
    {
          public:
          virtual void zeichnen() const = 0;    // pure virtual Memberfunktion
    };
    
    class Kind: public Mensch
    {
          public:
          void zeichnen() const
          {
          cout << "----------------" << endl;
          }
    };
    
    class Omi: public Mensch
    {
          public:
          void zeichnen() const
          {
               cout << "~##++~~~~1212``´´´''**++~~**''''" << endl;
          }
    };
    
    class Lebewesen
    {
          public:
          void zeichnen (Mensch& mensch)
          {
               mensch.zeichnen ();
          }
    };
    
    int main()
    {
      Mensch *p_Base;
      Lebewesen *m_ptr = new Lebewesen;
      p_Base  = new Lebewesen;
    
      p_Base = new Kind;
      m_ptr->zeichnen(*p_Base);
    
      p_Base = new Omi;
      m_ptr->zeichnen(*p_Base);
    
      cin.get();
    
      return 0;
    }
    


  • und die speicherlecks sollen auch direkt nachgemacht werden?

    btw: was soll eigentlich gezeichnet werden?



  • ja hatte delete aufrufen vergessen...sry
    cu


Anmelden zum Antworten