rein virtual function
-
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?
geloeschtEs 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