Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Borland C++ Builder 6, To.Double (https://www.delphipraxis.net/59855-borland-c-builder-6-double.html)

glunzl 29. Dez 2005 16:43


Borland C++ Builder 6, To.Double
 
Hallo!

In der Schule gibts statt Delphi, C++ mit dem Borland Builder 6.
Ich Frage mich gerade, warum die Methode To.Double (ist doch eine Methode?!?) hinten ansteht und wie ihr was übergeben werden kann, da die Klammern doch hintern leer sind.
Code:
Bsp: x = Edit1->Text.ToDouble()
Die Suche fühte mich in der dstring.cpp auf folgende Zeile:

Code:
 
double __fastcall AnsiString::ToDouble() const
  {
#if 0
    //!JK change this to return a long double when the compiler properly
    //!JK promotes/demotes long doubles/doubles
#endif
    return Sysutils::StrToFloat(*this);
  }
Ich denke mir, das hier auf die Funktion StrToFloat umgeleitet wird. Aber immernoch bleibt bei ir die Frage, wie funktioniert das mit den hinten anstellen der Methode/Funktion und warum die Klammern leer bleiben.

Kann jemand mal Licht in mein Dunkel bringen?

Dank und Gruß
Glunzl

tommie-lie 29. Dez 2005 17:07

Re: Borland C++ Builder 6, To.Double
 
Du bist hier seit 21.3.2004 angemeldet, du solltest also mittlerweile ein wenig programmieren können.
Wieso sollte man einer Funktion ToDouble() einen Parameter übergeben? Es ist eine Methode der verwendeten String-Klasse und wandelt den enthaltenen String in einen Wert vom Typ double um.
Und wo sollte man sie sonst anstellen, wenn nicht hinten? Es ist eine Methode der Stringklasse, also schnappst du dir mit Edit1->Text den String und rufst die Methode auf, ganz einfach.
Wäre in Delphi String ebenfalls eine Klasse und nicht Compiler-Magic, würde das in Delphi genauso funktionieren: Edit1.Text.EineMethode().
Und warum die Klammern leer bleiben, hast du schon richtig erkannt: es werden keine Parameter übergeben. Eine Methode, die lediglich das Objekt in einen anderen Typ umwandelt, braucht keinen weiteren Parameter mehr. Müsste man ihr etwas übergeben, müsste man es zwischen die Klammern schreiben, wie bei jeder anderen Funktion in C auch.

glunzl 29. Dez 2005 17:39

Re: Borland C++ Builder 6, To.Double
 
Zitat:

also schnappst du dir mit Edit1->Text den String und rufst die Methode auf, ganz einfach
Angenommen in Delphi wäre es eine Klasse ...
Zitat:

Edit1.Text.EineMethode().
würde EineMethode doch links den Rückgabewert haben. Aer ich weise doch nicht Edit1.Text etwas zu, sondern
Code:
Bsp: x = Edit1->Text.ToDouble()
Ich glaube, ich sehe den Wald vor lauter Schnee nicht ...

tommie-lie 29. Dez 2005 18:11

Re: Borland C++ Builder 6, To.Double
 
Zitat:

Zitat von glunzl
würde EineMethode doch links den Rückgabewert haben.

Richtig, aber dabei ist "Edit1.Text.EineMethode" ein Entity und das Ergebnis der Methode landet links *davon*, also in der Variable x. Das ist in Delphi und in C++ genauso. Genaugenommen sieht das ganze so aus:[code]x = (Edit1->Text).EineMethode();[/quote]Zuerst wird Edit1->Test "aufgelöst", man erhält
Code:
x = virtuelle_temporaere_variable.EineMethode();
und der Rückgabewert von EineMethode() landet in der Variable x.

glunzl 29. Dez 2005 20:19

Re: Borland C++ Builder 6, To.Double
 
Danke für die Hinweise. Ich werd das nochmal vertiefen müssen, sehe aber schon klarer :-)

Gruß
glunzl

glunzl 30. Dez 2005 09:11

Re: Borland C++ Builder 6, To.Double
 
Hallo nochmal!

Kann man denn allgemein sagen, das Methoden, da Objektbezogen, immer "hinten anstehen"?

Und sind somit folgende Ausdrücke äquivalent:
Code:
x = Edit1->Text.ToDouble() ;
x = StrToFloat(Edit1->Text) ;
Gruß
glunzl

jim_raynor 30. Dez 2005 09:23

Re: Borland C++ Builder 6, To.Double
 
Zitat:

Zitat von glunzl
Hallo nochmal!

Kann man denn allgemein sagen, das Methoden, da Objektbezogen, immer "hinten anstehen"?

Und sind somit folgende Ausdrücke äquivalent:
Code:
x = Edit1->Text.ToDouble() ;
x = StrToFloat(Edit1->Text) ;
Gruß
glunzl

Ja.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 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