Konstruktor Frage
-
Hi ich verstehe folgendes nicht so ganz...
class TKreis { public: int x, y, Dicke; void Erscheinen (void); void Bewegen (void); void Verschwinden (void); TKreis (int xx, int yy, int dd); }; TKreis *Kreis; TForm1 *Form1; //--------------------------------------------------------------------------- TKreis::TKreis(int xx, int yy, int dd) { x = xx; y = yy; Dicke = dd; }Warum muss da nochmal so ne übergabe stattfinden?
Geht es nicht auch so:
class TKreis { public: void Erscheinen (void); void Bewegen (void); void Verschwinden (void); TKreis (int x, int y, int Dicke); }; TKreis *Kreis; TForm1 *Form1;

Bzw welchen Zweck erfüllt das obere? Und warum muss es so gemacht werden?
Thx schonmal im Voraus!!!!
Straightflush
-
Das, was du als eigene Idee gepostet hast, ließe sich nicht kompilieren, da du in der Klasse TKreis einen Konstruktor angibst, dessen Rumpf aber nicht existiert (linker error: unresolved ...). Bei deiner Version würdest du also gänzlich auf einen Konstruktor verzichten, nimmst dann aber in Kauf, dass die Variablen x, y und Dicke deiner Instanz einen undefinierten Wert haben (Stichwort lokale Integer, diese werden nähmlich im Gegensatz zu globalen nicht mit 0 initialisiert).
Das obere Beispiel ist aber auch nur wenig sinvoll, da der Konstruktor lediglich genutzt wird, um public Variablen zu setzen. Damit umgehst du ausschließlich das Problem der undefinierten Werte.
Eine meiner Meinung nach brauchbarere Implementierung sähe z.B. wie folgt aus:
struct TKreisOptionen { public: int x, y, d; }; class TKreis { private: TKreisOptionen Koordinaten; public: TKreis(int x, int y, int d) { this->Koordinaten.x = x; this->Koordinaten.y = y; this->Koordinaten.d = d; } TKreisOptionen GetKoordinaten() { return this->Koordinaten; } }; // ..... // Zu benutzen z.B. wie folgt: void __fastcall TForm1::Button1Click(TObject *Sender) { TKreis *MyKreis = new TKreis(5, 3, 2); ShowMessage(MyKreis->GetKoordinaten().x); delete MyKreis; }
-
Hallo,
Also ich würde hier eher eine Initialisierungsliste nehmen.
class TKreis { public: int x, y, Dicke; void Erscheinen (void); void Bewegen (void); void Verschwinden (void); TKreis (int x_, int y_, int d_) : x(x_), y(y_), Dicke(d_) {} };Bei Bedarf könnten im Konstruktor auch Default-Parameter angegeben werden falls man mal einen trivialen Konstruktor benötigt.
Das gleiche könnte man auch für TKreisOptionen verwenden.
Korrekter wäre es aber die internen Variablen private zu machen und Zugriffsfunktionen zu erzeugen.