Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: kleines OOP Beispiel bitte um Anmerk./Verbesserungvorsch

  Alt 14. Okt 2008, 15:39
Zitat von newbe:
1. Wozu benötigt man den Constructor/Destructor?
2. Benötigt man ihn im diesem Beispiel überhaupt?
3. Und wozu dient er sonst im allgemeinen?
4. Was ist der Unterschied zwischen Constructor und einer Klasse.init; procedure?
5. Was bedeutet der "Default 0" Wert in der Property Deklaration?
1. Der Konstruktor ist eine vom Compiler "unsichtbar" erweiterte Methode, bei der als aller erstes der Speicher vom System reserviert wird, den die Instanz benötigt. Sein Rückgabewert ist immer ein Zeiger auf den Anfang dieses Bereiches. Der Destruktor macht das Gegenteil: Er gibt den vom Konstruktor angeforderten Speicher zur Neuverteilung in die Obhut des Betriebssystems zurück.

2. Prinzipiell benötigt man beide immer, weswegen der Urahne aller Klassen (TObject) beide bereits enthält. Du musst sie aber nicht wie in deinem Beispiel leer überschreiben, wenn du nicht selbst noch Werte/Felder in deiner Klasse (de)initialisieren willst/brauchst. Dort kann man sie getrost weg lassen, wodurch automatisch der Konstruktor/Destruktor der Elternklasse verwendet wird.

3. s.o.

4. Eine init Prozedur ist eine einfache Methode. Sie würde keinen Speicher anfordern, d.h. sie kann erst nach dem Konstruktor aufgerufen werden - wie jede andere Methode auch (ausgenommen Klassenmethoden). Die Namensgebung "init" ist dabei völlig egal. Es ist zudem im generellen eigentlich üblich Initialisierungen im Konstruktor vorzunehmen, und dafür nicht noch eine separat aufzurufende Methode anzulegen (es sei denn der Konstruktor ruft diese dann auf).

5. Damit legst du den Wert der Eigenschaft fest, den sie direkt nach Aufruf des Konstruktors hat. Unter Delphi werden Felder grundsätzlich mit 0 initialisiert, weshalb hier die explizite Angabe nicht nötig wäre. Sie tut aber auch nicht weh . Default-Werte lassen sich übrigens nur für einfache Datentypen vorgeben, d.h. nicht für Klassen, Records und Arrays (da bin ich mir zumindest 99%ig sicher).


Edit: Yay, sind dem roten Kasten satte 3 Beiträge durchgegangen
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat