Einzelnen Beitrag anzeigen

Benutzerbild von MGC
MGC

Registriert seit: 15. Mai 2008
Ort: Helsa
106 Beiträge
 
Turbo Delphi für Win32
 
#20

AW: Meine Probleme mit Delphi-OOP ...

  Alt 24. Feb 2012, 00:31
So, jetzt wirds richtig konfus.

Also erstmal zum Thema lokale Variable:
Wie muss ich das verstehen? Du ordnest Deinem MainForm eine lokale Variable unter, in die Du dan diese MainForm erzeugen willst? Meinst DU damit, dass Du diese Variable als Feld in Deinem MainForm hinterlegst? Dann würdest Du ja Dein Form in sich selbst erzeugen und kannst eigentlich erst richtig auf Dein Feld zugreifen, wenn Du Dein Form (das Objekt) erzeugt hast... Das klingt seltsam. Meine MainForm ist grundsätzlich in einer globalen Variable hinterlegt, es sei denn ich würde das MainForm aus einem eigenen Objekt heraus erzeugen und mich selbst um die Verwaltung (erzuegen, verwalten, freigeben) kümmern, bzw. einen Parent angeben, ansonsten überlasse ich das vollkommen Delphi.

Dann zum Thema überladen und reintroduce. Auf reintroduce bin ich nicht eingegangen, da Du es unbedingt vermeiden wolltest, weshalb auch immer.
Sieh das ganze mal aus der Sicht des Compilers. Du hast ein, von einer Basisklasse abgeleitetes, Objekt (in OOP ganz normal) dessen Konstruktor in der Basisklasse als virtuell deklariert ist (nicht abstrakt, sonst müsstest Du es auf jedenfall selbst beleben, siehe z.B. TStrings). Wenn Du nun einen eigenen Konstruktor Create erzeugst und nicht angibst, dass es sich um eine mögliche Erweiterung Deinerseits zum ursprünglichen Create, dann gibt es jetzt zweimal Create und der Compiler warnt Dich, dass Dein, in Deiner abgeleiteten Klasse angegebenes Create, den originalen virtuell deklarierten Konstruktor Create verdeckt. Da Du aber beim überladen den Befehl overload hinter beide Konstruktoren setzen musst, ist es zwingend erforderlich dieses dem Compiler mitzuteilen. Daher kannst Du entweder bereits den originalen Konstruktor überschreiben und erweitern, ein override udn ein overload hinzufügen und dann einen weiteren Konstruktor mit overload hinzusetzen, wenn seine Parameterliste sich vom ersten unterscheidet. Willst Du den originalen Konstruktor nicht erweitern, dann teilst Du dem Comiler mit reintroduce udn overload mit, dass es sich bei dem ersten Konstruktor um den originalen aus der Basisklasse handelt und das Du weitere überladene Konstruktoren für andere Zwecke hinzufügst.

In wie weit es in einer anderen Sprache anders gehandhabt wird ist uninteressant, ich kann auch nicht diskutieren, dass ich es in C++ blöd finde immer diese {} zu setzen, wo das doch in Delphi auch nicht so ist und aus meiner Sicht nur die Lesbarkeit des Quellcodes verschlechtert.

Innerhalb der Zeit, in der wir hier unzählige Symbole aneinandergefügt haben um miteinander zu diskutieren, hätte man zigmal reintroduce schreiben können, egal ob man es blöd findet oder nicht.

Aber bitte diese Antwort nicht bös auffassen, sie ist nicht so polemisch gemeint, wie sie vielleicht klingen mag, wenn man sich in ein Thema hineingesteigert hat.

Viele Grüße.
Marc
Programmieren ist wie Chemie:
1. Wenn man alles einfach nur zusammenschmeisst kommt es zu unerwarteten Reaktionen.
2. Wenn es plötzlich anfängt zu qualmen, muss man eben noch mal von vorn anfangen.
  Mit Zitat antworten Zitat