Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C/C++ - Kompiler/Tutorial (https://www.delphipraxis.net/2907-c-c-kompiler-tutorial.html)

jbg 13. Feb 2003 16:21

Zitat:

Zitat von Chakotay1308
Was mich aber noch wundert: In der C++-Sprache von Borland wird der . durch ein -> ersetzt (z.B. bei einem record). Allerdings schreibt Dev-C++ immer . und es funktioniert. Kannste mir das mal erklären?

Das -> entspricht dem ^. unter Delphi. Der Pfeil dereferenziert den Zeiger und greift auf die Felder der struct/class zu. Der Punkt hingegen kann nur für statische, also nicht für Zeiger, angewandt werden.
Code:
typedef struct tagMYSTRUCT {
  int a, b;
} MYSTRUCT;

void main()
{
  MYSTRUCT st1;
  st1.a = 10; // ein direkter Zugriff ist hier möglich.

  MYSTRUCT *st2 = new MYSTRUCT;
  st2->a = 20; // hier muss der Zeiger dereferenziert werden
  delete st2;
}

CalganX 13. Feb 2003 17:09

Hm... verstanden, aber dennoch komisch, denn man nehme sich folgendes Beispiel:
Delphi-Quellcode:
// Borland C++-Builder (1)
Application->MessageBox( /* ... */);

// Borland Delphi (6)
Application.MessageBox( {...} );

// Dev-C++
// Gibt's hier nicht...
Da verstehe ich das nicht, da man hier ja nicht ^. schreibt...

Chris

d3g 13. Feb 2003 17:28

Hi Chakotay,

in Delphi werden Objekte, z.B. TApplication, als Referenz benutzt, d.h. du greifst immer über einen Poiter auf das Objekt zu, nur dass der Compiler das für dich vertuscht, da dieses Verhalten nur intern so läuft (aber es sorgt dafür, dass du, wenn du Objekte an Funktionen übergibst, auch wirklich auf die Obbjekte zugreift, die du haben willst). Um das mal in Code umzusetzen:
Delphi-Quellcode:
var
  Application: TApplication;
// Zugriff
Application.MessageBox(...);

// wird intern so behandelt:
var
  Application: ^TApplication;
// interner Zugriff
Application^.MessageBox(...);

// in C++ sähe das gleich so aus:
TApplication *Application;
Application->MessageBox(...);
MfG,
d3g

Robert 16. Feb 2003 10:00

Nicht zuviel erzählen, sonst steige ich wirklich noch auf C++ um *g*

OregonGhost 16. Feb 2003 11:46

Übrigens gibt es, falls du den Punkt lieber magst als den Pfeil, in C++ auch Referenzen:
Code:
TApplication Application;
/* ... */
TApplication& App = Application;
App.MessageBox(/* ... */);
Referenzen werden in C++ aber typischerweise nur für die Parameterübergabe benutzt. Sie sind sicherer, weil sie immer auf ein genau definiertes Objekt verweisen, während ein Zeiger ja auch wild um sich schießen kann mit seinen Adressen. Was ja auch oftmals Neulinge in C verzweifeln lässt, weil sie sehr früh damit konfrontiert werden, im Gegensatz zu Object Pascal, speziell Delphi, das wie gesagt mehr auf Referenzen setzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz