AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Passwort Eingabe

Ein Thema von Jonson · begonnen am 18. Jun 2002 · letzter Beitrag vom 19. Jun 2002
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11
  Alt 18. Jun 2002, 13:41
Zitat von sakura:
Parameter mit const
Dem Compiler wird deutlich gemacht, wiederum einem Pointer zu überreichen. Der Programmierer verbietet sich selbst, den Inhalt der Variable zu ändern.
Also haben wir beide recht gehabt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#12
  Alt 18. Jun 2002, 14:56
Moin Zusammen,

was man dabei aber auch wieder nicht vergessen darf:
Wird als Parameter ein Objekt übergeben, z.B. eine StringListe, so können auch dann Werte verändert werden, selbst wenn dieser Parameter als const übergeben wird, da der Inhalt des Parameters so oder so eine Referenz auf das Objekt enthält.

Solange kein String als Wertparameter übergeben wird (also ohne var/const) nehmen sich die Varianten bezüglich ihrer Geschwindigkeit nicht viel.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#13
  Alt 18. Jun 2002, 15:13
Hi,

also kurz als Erweiterung um Christians Kommentar mit einzubeziehen.

Wenn ein Objekt als Parameter übergeben wird, dann kann man generell auf alle (öffentlichen) Methoden und Eigenschaften des Objektes zugreifen und somit den Inhalt ändern.

Object als var: Der alte Pointer (intern als Pointer) zum Objekt kann gelöscht/überschrieben werden. Objekt sollte wahrscheinlich vorher zerstört werden, um alle Ressourcen freizugeben. Der Aufrufer benutzt nach dem Methodenaufruf das neue Objekt.

Object als const: Der alte Pointer kann nicht geändert werden - aber die Methoden und Eigenschaften des Objektes können genutzt/geändert zu werden.

Object ohne var/const: Wie bereits bei normalen Variablen - der Pointer wird kopiert, sollte dieser innerhalb der Methode geändert werden. Er wird belassen, wenn keine Neuzuweisung auf den Pointer erfolgt.



Danke Christian - jetzt sollte (hoffentlich) diese Frage vollständig geklärt sein.
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Susi_W

Registriert seit: 18. Jun 2002
Ort: Roitzschjora
3 Beiträge
 
#14

Muss man das verstehen?

  Alt 18. Jun 2002, 23:32
Hi ihr.

Ich hab jetzt versucht zu verstehen, was da steht, aber irgendwie bin ich nicht ganz mitgkommen.
Wenn man einen Parameter mittels var übergibt, ändert man doch den Inhalt der Variable.
Mit const kann man ihn nicht ändern(denke ich).
Wenn man den Parameter ohne var/const deklariert, wird eine Kopie auf dem Stack angelegt.
Selbst wenn ich eine StringListe per const übergebe, kann ich deren Inhalt ändern.
Ich versteh das nicht.
Da hat Borland wohl Mist gebaut.

Gute Nacht an alle, Susi.
Delphi ist total süß.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#15
  Alt 18. Jun 2002, 23:51
Moin Susi,

ich weiss gar nicht, was Du willst? So wie es aussieht hast Du es doch verstanden, nur was ein Objekt ist vielleicht noch nicht so ganz.
Eine Variable, die ein Objekt darstellt enthält nur den Zeiger auf das Objekt.
(Leider (zum Glück!?) hat Borland es verstanden dies so schön zu kapseln, dass es nicht unbeding sofort auffällt.)
Dadurch sind alle Eigenschaften/Methoden des Objektes zugänglich.
Beispiel StringListe:
Die Methode Add ist dafür zuständig neue Strings an die Liste anzuhängen. Da diese ja zugänglich ist, funktioniert auch das Add.
Was hingegen nicht geht, wenn der Wert als Konstante oder Wertparameter übergeben wird, ist es den Inhalt auf ein anderes Objekt zu ändern. Könnte auch fatal sein (und in Speicherlecks münden), wenn vorher nicht das ursprüngliche Objekt wieder freigegeben würde.
Das ist das gleiche Prinzip, wie bei den API Funktionen. Sollen hier die Funktionen Werte zurückliefern, so wird oft einfach die Adresse eines Speicherbereiches übergeben, in den die Funktion dann die Ergebnisse schreiben kann. Dabei stört es dann auch überhaupt nicht den Parameter als Konstant(e) anzugeben. Der Pointer reicht, um dieses zu ermöglichen.
Wenn Borland "Mist gebaut" hat, dann bei der Deklaration der einen oder anderen API-Funktion. Die lassen sich oft nicht so aufrufen, wie es laut PSDK gehen sollte.

BTW:
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#16
  Alt 19. Jun 2002, 06:35
Hallo Susi_W,

die Aussage:

Zitat:
Wenn man einen Parameter mittels var übergibt, ändert man doch den Inhalt der Variable.
sollte am Ende ergänzt werden durch:

Code:
, wenn man dem Parameter innerhalb der Procedure / Function einen Wert zuweist.
denn der Wert auch als Var Parameter übergebener Variablen wird sonst nicht verändert.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz