Hallo,
ich bin noch relativ neu hier und wurde bei meiner anfrage nach einem Artikel in dem man einiges über delphi lernen kann auf den hier verwiesen:
www.christian-stelzm...rtikel/crashkurs.htm
Dabei haben sich für mich jedoch einige Fragen aufgetan:
1) Properties:
| Zitat: |
| Hier wurde nur die Deklaration für die property "x" verändert: Es wird von "x" aus nun nicht mehr auf die private Eigenschaften "Fx" zugegriffen, sondern die Aufrufe werden an die Funktion "getX" und die Prozedur "setX" weitergeleitet. Wird also "x" wieder (wie oben bereits gezeigt) der Wert 5 zugewiesen, wird nun die Prozedur "setX" aufgerufen und als Parameter "value" die 5 übergeben. Wird "x" abgefragt, so wird die Funktion "getX" aufgerufen und das Ergebnis als "x" zurückgegeben. |
Verstehe ich das richtig, dass wenn ich für setX eine prozedur einrichte, die den Wert vervierfacht und irgendwo im Programm x:=5 schreibe, setX aufgerufen wird und mein x schulssendlich 20 ist?
2) Der Array: Liege ich richtig wenn ich sage, dass er eine 'Variablensammlung' ist und sein zweck ist, einem das einfügen vieler einzelner Variablen zu ersparen?
3) Verschiedene Klassen: Mit virtual und abstract kann man einer Unterklasse erlauben, die Werte die von der Mutterklasse gegeben werden zu verändern. Aber welchen Sinn hat den überhaupt eine Unterklasse wenn sie diese Rechte nicht hat?
Es gibt hierbei folgendes angeführtes Beispiel:
| Zitat: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| type TAuto = class(TObject) private public function drive : String; end;
function TAuto.drive : String; begin result := 'TAuto.drive'; end; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| type TOpel = class(TAuto) private public function drive : String; end;
function TOpel.drive: String; begin result := 'TOpel.drive'; end; |
Und dazu folgende Verwendung der beiden Klassen:
Delphi-Quelltext 1: 2: 3: 4: 5:
| var auto : TAuto; begin auto := TOpel.Create; ShowMessage(auto.drive()); end; |
Beachten Sie dabei, dass "auto" zwar als "TAuto" deklariert wurde, aber der Konstruktor von "TOpel" aufgerufen wird, außerdem sollten Sie beachten, dass die Methode in "drive" in der Klasse "TAuto" nicht als "virtual" deklariert wurde.
Führt man diesen Code nun aus, sieht man, dass die Methode "drive" aus der Klasse "TAuto" aufgerufen wird, obwohl wir eine Instanz der Klasse "TOpel" erzeugt haben. |
Darf ich das so verstehen, dass man den in einer Unterklasse benutzten Funktionen in der Mutterfunktion immer die Attribute virtual und abstract geben muss, da ansonsten die Unterlassenfunktion nutzlos ist?
Welchen Sinn hätte das - da könnte delphi dies doch automatisch machen -> ich habe vermutlich irgedeinen denkfehler.
Vielen Dank schon mal im Vorraus für eure hilfe und entschuldigung falls einige meiner fragen für euch doch recht trivial sein sollten.
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Di 01.07.2008 um 18:35