Probleme mit Copy-Konstruktor einer abgeleiteten Klasse.
-
Hallo Leute,
ich habe ein Problem mit einem Copy-Konstruktor in einer abgeleiteten Klasse.
Die Basisklasse sieht folgendermaßen aus:
enum TYPE { empty, blocked, taken }; class Cell_t { public: Cell_t(TYPE, unsigned short int, unsigned short int); Cell_t(const Cell_t &); ... }Und der Copy-Konstruktor sieht so aus:
Cell_t::Cell_t(TYPE type, unsigned short int posX, unsigned short int posY) { itsType = type; itsPosX = posX; itsPosY = posY; }Die Basisklasse funktioniert gut aber die abgeleitete Klasse die folgendermaßen aussieht...
class TakenCell_t : public Cell_t { public: TakenCell_t(unsigned short int, unsigned short int, std::string, unsigned short int, unsigned short int, unsigned short int, unsigned short int); Cell_t(const Cell_t &); ... }macht mir Probleme. Und zwar stellt sich mir die Frage wie der Copy-Konstruktor aussehen soll? Mein erster Versuch ging natürlich in die Hose:
TakenCell_t::TakenCell_t(const TakenCell_t &rhs): Cell_t::Cell_t(const Cell_t &rhs) { itsText = rhs.GetText(); itsColSpan = rhs.GetColSpan(); itsRowSpan = rhs.GetRowSpan(); itsWidth = rhs.GetWidth(); itsHeight = rhs.GetHeight(); }Kann wer weiterhelfen?
Danke
Goran
-
Hallo Goran,
Dein Copy-Konstruktor von TakenCell_t muss so aussehen:
class TakenCell_t : public Cell_t { public: TakenCell_t( ... ); TakenCell_t( const TakenCell_t & b ); // Cell_t(const Cell_t &); <== das ist hier falsch std::string itsText; // usw. }; TakenCell_t::TakenCell_t( const TakenCell_t& b ) : Cell_t( b ) , itsText( b.itsText ) // weiter Member initialisieren {}benutzte Initialisierungslisten, das ist schneller, einfacher und sieht aufgeräumt aus.
Weiter wäre zu überlegen, ob Du überhaupt einen Copy-Konstruktor brauchst. Solange eine Klasse nur int, short, std::string und ähnliches als Member hat, die einfach nur kopiert werden müssen, würde ich den Copy-Konstruktor immer weglassen; er wird dann vom Compiler automatisch (und korrekt) erzeugt.
.. und vergiss das ';' hinter der Klassendefinition nicht.
Gruß
Werner