AGB  ·  Datenschutz  ·  Impressum  







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

C/C++ - Kompiler/Tutorial

Ein Thema von CalganX · begonnen am 12. Feb 2003 · letzter Beitrag vom 16. Feb 2003
Antwort Antwort
Seite 2 von 2     12   
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#11
  Alt 13. Feb 2003, 17:21
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;
}
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#12
  Alt 13. Feb 2003, 18: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
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#13
  Alt 13. Feb 2003, 18: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
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von Robert
Robert

Registriert seit: 4. Jan 2003
36 Beiträge
 
#14
  Alt 16. Feb 2003, 11:00
Nicht zuviel erzählen, sonst steige ich wirklich noch auf C++ um *g*
Wer hat gesagt, dass Borland NUR ein Begriff für ein Ölfeld sei!?

Ban Visual BASIC 4ever
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#15
  Alt 16. Feb 2003, 12: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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  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 06:13 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