Klassen - Noob
-
hallo forum
ich bin gerade bei den Klassen.
Ich möchte hier ein beispiel schreiben und wollte euch fragen was ich verstanden habe, also richtig ist und was ich falsch verstanden habe, also falsch ist. zusätzlich was an meinem beispiel noch fehlt, oder geändert werden müsste/könnte. Danke!//Klasse.h class CBasisKlasse { public: CBasisKlasse(Text); //Konstruktor virtual ~CBasisKlasse() //Dekonstruktor { delete[] Text; //Text freigeben } void Member_Funktion(); //Memberfunktion private: char* Text; //Attribut (bzw. Variable) }; //Klasse.h class CBasisKlasseB : public CBasisKlasse { public: ~CBasisKlasseB(); }; //Beispiel.cpp void CBasisKlasse::Member_Funktion() { CBasisKlasse *Zgr; Zgr->Text = "Heute sind die Klassen dran!"; }
-
Vielleicht solltest du dich erstmal mit Zeigern allgemein befassen. Deine Memberfunktion legt einen Zeiger an, der allerdings auch nichts zeigt, und setzt damit ein nicht vorhandendes Text-Feld auf die Adresse eines Zeichenliterals. Das ist schonmal falsch. Gäbe es ein Objekt, würde es im Destruktor dann versuchen, das Stringliteral zu delete[]en.
Außerdem ist es bei Klassen innerhalb einer Hierarchie IMHO guter Stil, nicht nur einen virtuellen Destruktor anzubieten, sondern auch den Kopierkonstruktor und den Zuweisungsoperator private zu machen d.h. zu verbieten.
Der OO-Teil mit Ableitung, Konstruktor/Destruktor stimmt, soweit ich das sehe. Nur dass das Ding "Destruktor", nicht "Dekonstruktor" heißt
-
Im Konstruktor fehlt der Typ von Text. Ich neheme mal nicht an das Text der Typ ist sondern das es ein char * sein soll. Desweiteren gibt man den Parameter nicht den selben Namen wie den Klassenattributen.
Normelerweise sollte Speicher von der selben Ebene freigegeben werden von der er alokiert wird. Man sieht hier nicht wie du Text genau anlegst, aber wenn du einfach den Zieger kopierst dann kan es mit dem freigeben von Text Probleme geben.
Gruß Mirauder Mo