Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
RSE
Beiträge: 462 Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:
Beitrag
von RSE » Sa 23. Aug 2008, 12:01
Hallo!
Wie vergleicht FreePascal eigentlich Objekte?
Code: Alles auswählen
var Obj1, Obj2: TObject; ... if Obj1 = Obj2 then begin ...end ;
Wann genau wird dieser Ausdruck wahr? Wenn beide Variablen (Obj1 und Obj2) auf die gleiche Speicheradresse verweisen (Die Startadresse der Instanz)? Oder wenn alle Felder beider Objekte die gleichen Belegungen haben? Oder gar noch etwas anderes?
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
theo
Beiträge: 10498 Registriert: Mo 11. Sep 2006, 19:01
Beitrag
von theo » Sa 23. Aug 2008, 13:26
Soviel ich weiss nur als Pointer (Adresse), d.h. ob es sich um das gleiche Objekt handelt.
pluto
Lazarusforum e. V.
Beiträge: 7180 Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)
Beitrag
von pluto » Sa 23. Aug 2008, 13:52
TFont z.b. macht das so
Code: Alles auswählen
function TFont.IsEqual ( AFont: TFont) : boolean;begin if ( AFont = Self ) then Exit ( true ) ; if ( AFont= nil ) or ( CharSet<>AFont.CharSet ) or ( Color<>AFont.Color ) or ( PixelsPerInch<>AFont.PixelsPerInch ) or ( Size<>AFont.Size ) or ( Height<>AFont.Height ) or ( Name<>AFont.Name ) or ( Pitch<>AFont.Pitch ) or ( Style<>AFont.Style ) then Result := False else Result := True ;end ;
Wenn du dir noch mal hierzu die ObjectListe anschaust, wirst du sehen, die machen das genau so wie in deinen Beispiel.
MFG
Michael Springwald
RSE
Beiträge: 462 Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:
Beitrag
von RSE » Sa 23. Aug 2008, 15:55
Danke, dann ist es so, wie ich gedacht hatte
TFont.IsEqual ist ja dann eher ein spezieller Vergleich, ob die beiden Instanzen das gleiche repräsentieren (oder es sich gar um das selbe Objekt handelt = die selbe Instanz).
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
EugenE
Beiträge: 440 Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:
Beitrag
von EugenE » Sa 23. Aug 2008, 16:58
man könnte auch = operator überladen und dann deine eigene Überprüfung durchführen
Euklid
Lazarusforum e. V.
Beiträge: 2808 Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:
Beitrag
von Euklid » Sa 23. Aug 2008, 18:14
EugenE hat geschrieben: man könnte auch = operator überladen und dann deine eigene Überprüfung durchführen
Cool - das Überladen geht sogar mit dem = Operator?
pluto
Lazarusforum e. V.
Beiträge: 7180 Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)
Beitrag
von pluto » Sa 23. Aug 2008, 19:47
Ja ! müsste gehen, ich weiß nur nicht genau wie, in den Lazarus Soruce findest du aber reichlich beispiele dazu...
MFG
Michael Springwald
alexander
Beiträge: 423 Registriert: Di 5. Feb 2008, 12:45
OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
CPU-Target: 64Bit
Kontaktdaten:
Beitrag
von alexander » Sa 23. Aug 2008, 22:23
hmmm würde mich auch interessieren für records. Wenn jemand es weiß wie, bitte reinschreiben!
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!www.alexanderroth.eu
EugenE
Beiträge: 440 Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:
Beitrag
von EugenE » Sa 23. Aug 2008, 22:36
Code: Alles auswählen
operator = ( a, b : TRecordName) : Boolean;begin Result := true ;end ;
ich weiß nicht ob es funktioniert, kannst es ja mal ausprobieren ^^
marcov
Beiträge: 1100 Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)
Beitrag
von marcov » So 24. Aug 2008, 12:06
[Language=Kohle-Deutsch]
Fuer overloading mit Records, sieh den Ucomplex unit (im rtl/inc Verzeichnis).
[/language]
alexander
Beiträge: 423 Registriert: Di 5. Feb 2008, 12:45
OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
CPU-Target: 64Bit
Kontaktdaten:
Beitrag
von alexander » So 24. Aug 2008, 12:15
WOW. Sehr cool. Danke.
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!www.alexanderroth.eu
Hitman
Beiträge: 512 Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz
Beitrag
von Hitman » Mo 25. Aug 2008, 18:37
Für Objekte wird das allerdings nicht gehen. Operatoren können/dürfen nicht für Pointer überladen werden - und das schließt Objekte mit ein.
alexander
Beiträge: 423 Registriert: Di 5. Feb 2008, 12:45
OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
CPU-Target: 64Bit
Kontaktdaten:
Beitrag
von alexander » Mo 25. Aug 2008, 20:00
hmmm ah klar. logisch.
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!www.alexanderroth.eu
marcov
Beiträge: 1100 Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)
Beitrag
von marcov » So 7. Sep 2008, 15:53
Hitman hat geschrieben: Für Objekte wird das allerdings nicht gehen. Operatoren können/dürfen nicht für Pointer überladen werden - und das schließt Objekte mit ein.
Teilweise Falsch. Es funktioniert fuer Objekte (TP), aber nicht fuer Classes (Delphi)