AGB  ·  Datenschutz  ·  Impressum  







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

konstanter Rückgabewert bei Funktionen?

Ein Thema von chaoslion · begonnen am 9. Jan 2009 · letzter Beitrag vom 10. Jan 2009
Antwort Antwort
chaoslion

Registriert seit: 1. Mär 2006
52 Beiträge
 
#1

konstanter Rückgabewert bei Funktionen?

  Alt 9. Jan 2009, 22:25
Hallo!


ist es denn möglich einer Funktion einen konstanten Rückgabewert zu geben?
Zb wenn ich ein Element meiner Listeklasse will, soll er ja keine neue Instanz zurückgeben sondern quasi den Zeiger.


mfG
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#2

Re: konstanter Rückgabewert bei Funktionen?

  Alt 9. Jan 2009, 22:28
Ich würde sagen, dass die Rückgabe normalerweise immer ein Zeiger auf die bestehende Instanz ist. Eine NEUE Instanz müsstest du doch selbst in der Funktion erzeugen.
Ralph
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: konstanter Rückgabewert bei Funktionen?

  Alt 9. Jan 2009, 22:32
Es wird ja keine Instanz, sondern eine Referenz(Zeiger) auf sie zurückgegeben. Aber was meinst du mit Konstante? Skizziere dein Vorhaben einmal etwas genauer ( Code)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

Re: konstanter Rückgabewert bei Funktionen?

  Alt 9. Jan 2009, 22:38
Ich mutmaße mal:
Delphi-Quellcode:
type
  TMyClass = class
  private
    MyList: TObjectList;
    function GetFirstElement: TObject;
  public
    property FirstElement: TObject read GetFirstElement;
...

function TMyClass.GetFirstElement: TObject;
begin
  if MyList.Count > 0 then
    Result := MyList[0]
  else
    Result := nil;
end;
Ich könnte mir vorstellen, dass etwas in der Art gemeint ist.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: konstanter Rückgabewert bei Funktionen?

  Alt 9. Jan 2009, 22:40
Was du meinst, ist nicht "konstant". Was du meinst, ist Referenz statt Wert. Wenn dein Listenelement ein Array, Record, String oder Objekt ist, wird immer die Referenz zurückgegeben, wobei es bei Arrays, Strings und ich glaube auch Records ein paar komplizierte Regeln gibt, die ich mir nie merken kann, dass manche davon "Copy on write" haben, also es wird zwar nur die Referenz übergeben, aber sobald man dann versucht, darauf zu schreiben, wird es kopiert, sodass das Original unverändert bleibt.

Wenn du also nur die Referenz zurückgeben willst, musst du gar nichts machen, (außer bei primitiven Typen wie Integern, da geht das gar nicht, ohne einen Record oder eine Klasse drumrumzuwrappen), wenn du eine Kopie zurückgeben willst, schon.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
chaoslion

Registriert seit: 1. Mär 2006
52 Beiträge
 
#6

Re: konstanter Rückgabewert bei Funktionen?

  Alt 9. Jan 2009, 22:44
ach okey danke euch. nun alles klar.


ich ging von c++ aus >

Code:

class ctest {
public:
 tlist item;
 const tlistelement &getItemAt( int idx );
}
dachte man müsse/könne es in Delphi auch so machen aber wenns automatisch geht, isse ja wunderbar
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#7

Re: konstanter Rückgabewert bei Funktionen?

  Alt 10. Jan 2009, 14:04
Zitat von chaoslion:
ach okey danke euch. nun alles klar.
...dachte man müsse/könne es in Delphi auch so machen aber wenns automatisch geht, isse ja wunderbar :)
Hallo,

wenn du sichergehen willst, dass der Compiler von sich keine Kopierfunktionen einfügt, dann kannst du ja als Rückgabe einen Pointer definieren, also PObject statt TObject. U.U. musst du das noch selbst definieren, und nach den gültigen Delphi-Regeln ist PObject dasselbe wie TObject, aber für den Compiler ist es eben ein Pointer und er unternimmt nichts weiter.

Die Weiterverarbeitung ist etwas komplizierter, aber im Notfall hilft ein Typecast.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: konstanter Rückgabewert bei Funktionen?

  Alt 10. Jan 2009, 15:02
Oh nein, das ist eine ganz schlechte Idee. Wenn du ein Objekt AObj hast und dann @AObj zurückgibst, bekommst du wahrscheinlich Mist raus.

Bei Records ist das schon eher sinnvoll, aber bei Arrays und Strings nicht.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort


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