Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ mit dem Borland Builder 6. Komponentenzugriff mit . u -> (https://www.delphipraxis.net/59877-c-mit-dem-borland-builder-6-komponentenzugriff-mit-u.html)

glunzl 29. Dez 2005 23:05


C++ mit dem Borland Builder 6. Komponentenzugriff mit . u -&
 
Hallo!

Noch eine Frage beim erlernen hat sich nicht klären lassen:
Komponentenzugriffe erfolgen mal mit . (Punkt) und mal mit dem Pfeil.
Code:
Edit1->Text.ToDouble ;  // Zugriff mit .
MemoOut->Lines->Add("hallo") ; // Zugriff mit ->
In einem Tutorial habe ich gelesen, das mit . ein Komponentenzugriff erfolgt, mit -> ein Komponentenzugriff über einen Zeiger erfolgt. Allerdings habe ich noch nicht herausgefunden, wann was zu benutzen ist und warum.

Hat jemand eine einfache Erklärung parat?

Gruß
glunzl

Oxmyx 29. Dez 2005 23:30

Re: C++ mit dem Borland Builder 6. Komponentenzugriff mit .
 
Mit . greifst du auf die Felder eines statisch instanzierten Objekts zu, mit -> greifst du auf die Felder eines dynamisch instanzierten Objekts zu. Dabei ist a->b nur eine Abkürzung von (*a).b

Code:
class KomplexeZahl
{
    float real;
    float img;
};

// statisch instanziert
KomplexeZahl zahl;
zahl.real = 1.0f;
zahl.img = 0.5f;

// dynamisch instanziert
KomplexeZahl* zahl;
zahl = new KomplexeZahl;
zahl->real = 1.0f;
zahl->img = 0.5f;
// ist das selbe wie:
(*zahl).real = 1.0f;
(*zahl).img = 0.5f;
Der Vollständigkeit halber gibt es noch zwei weitere Zugriffsoperatoren, nämlich .* und ->*, beides sogenannte "Pointer-to-Member"-Operatoren. Man greift damit nicht direkt auf ein Member der Klasse zu, sondern eben über einen Zeiger auf das Member.
Beispiel:
Code:
(pObjekt->*pFunktion)(einWert);
Dieser Code ruft die Funktion auf, auf die pFunktion zeigt, und übergibt ihr "einWert".

glunzl 30. Dez 2005 08:35

Re: C++ mit dem Borland Builder 6. Komponentenzugriff mit .
 
Zitat:

Zitat von Oxmyx
Mit . greifst du auf die Felder eines statisch instanzierten Objekts zu, mit -> greifst du auf die Felder eines dynamisch instanzierten Objekts zu. Dabei ist a->b nur eine Abkürzung von (*a).b

Das ist angekommen :-)
Komplexe Zahlen muß ich am Wochenende eh üben, danke für die Erinnerung :-)

Aber worin besteht nun der Unterschied in meinem Beispiel mit TEdit und TMemo? Beide sind zur Entwurfszeit erzeugt worden, aber trotzdem wird die add Methode mit dem -> angesprochen :gruebel:

Gruß
glunzl

jim_raynor 30. Dez 2005 08:43

Re: C++ mit dem Borland Builder 6. Komponentenzugriff mit .
 
Generell werden in der VCL alle Objekte (TEdit, TMemo, TStringList) dynamisch alloziert. Deshalb der ->. Einzigste Ausnahme bildet der AnsiString. Diesen macht man in der Regel nicht dynamisch. Deshalb wird auf Methoden des AnsiStrings in der VCL mit . zugegriffen. Text ist nunmal ein AnsiString. Lines dagegen ist eine TStringList die dynamisch erzeugt wird.

glunzl 30. Dez 2005 09:01

Re: C++ mit dem Borland Builder 6. Komponentenzugriff mit .
 
Ach sorum läuft der Hase :-)
Ist AnsiString denn wirklich die Ausnahme, oder gibt es da noch andere geläufige Kandidaten?

Gruß
glunzl


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