Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 01:34

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: cpp -> delphi
BeitragVerfasst: Mo Jul 16, 2007 22:03 
Offline
DGL Member

Registriert: Mi Jan 31, 2007 09:02
Beiträge: 28
Hey ho allerseits,
ich habe bislang nur mit c++ programmiert und muss jetzt von arbeit aus auf delphi umsteigen. da hab ich mir gedacht, frag ich doch einfach mal hier in die runde, was die groebsten unterschiede sind, worauf man achten sollte, wenn man den umstieg macht. oder sind die sprachen sich so aehnlich dass ich mir keinen kopf machen muss?
danke fuer jede hier gepostete erfahrung, tipp etc.
cherio Woltan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 16, 2007 22:24 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Unterschiede:
  • { -> begin, } -> end ;)
    Es wird anders eingerückt:
    Code:
    1. if (bla) {
    2. }

    Code:
    1. if bla then
    2. begin
    3.  
    4. end;
  • Pointerdereferenzierung über ^. Bei Pointern auf Records/Klassen kann das ^ auch weggelassen werden weil mit einem . automatisch dereferenziert wird.
  • Typumwandlungen sind komplizierter, musst halt über die verschiedenen Instanzen. Als Beispiel:
    Code:
    1. IXMLNode(Pointer(Bla))

    Bla ist vom Typ TObject, enthält aber ein IXMLNode. Da IXMLNode kein Abkömmling von TObject ist muss man erst den Umweg über Pointer gehen.
  • Namenskonvention:
    Klassentypen werden mit grossen T definiert, Pointer mit grossem P. Private Elemente mit einem F.
  • Boolean ist nur true oder false. Man muss dort einen Extravergleich einfügen.


Es gibt noch weitere Unterschiede. Aber das sind erstmal die, die mir einfallen und die ich als wichtig erhalte.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 17, 2007 05:45 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
zahlen ist nicht von sich aus booleans - das merkt man dann besonders bei if-abfragen, schleifenbedingungen oder so...

Code:
  1.  
  2. var
  3. byte i;
  4. ...
  5. i := 10;
  6. while (i)
  7. begin
  8.   ;
  9. end
  10.  

klappt also nicht und die bedingung muss zu i > 0 geändert werden. Zuweisungen in Zuweisungen und ähnliche schlecht lesbaren Späßchen sind auch nicht möglich, müssen also zerlegt werden. Der Operator i++ wird zu inc(i), -- zu dec(i).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 17, 2007 07:43 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Erstmal zu dem Interface IXMLNode: Mit dem As Operator kann man problemlos Klassen in Interfaces casten. Wenn die Instanz das Interface hat, geht der Cast gut, ansonsten gibt's 'ne exception.

Zu Hauptunterschied C++/Delphi:

In Delphi gibt es keine:
- Templates (allgemein nix, für das ein Präprozessor zuständig wäre, da es einen solchen nicht gibt)
- static Member (nur Methoden und da darf man nicht auf Member zugreifen)
- Operatorüberladung (ab Delphi2005 schon)
- Mehrfachvererbung; In Delphi wird das über Interfaces gelöst und ist dadurch sauberer
- Keine bedingte Zuweisung (<Ausdruck>?<Ausdruck>:<Ausreuck>)
- Keine Initialisierung bei der Deklaration von Variablen (bei Konstanten schon)
- Keine Post-/Präfixoperatoren

Dafür geht in Delphi, was in C++ nicht geht:
- Properties: Hier kann man getter und Settermethoden definieren, die einen geregelten Zugriff auf die Member ermöglichen (der Member selber kann dadurch eine geringere Sichtbarkeit haben)
- Objektinstanzen sind gleichzeitig Zeiger, d.h. Dereferenzierung bei Memberzugriffen fallen weg und man muss nicht extra pointer für Funktionsaufrufe übergeben
- Kein Rumgefummel mit Headerdateien: Deklaration und Implementierung sind in der selben Datei.
- Formulardesign ist wesentlich einfacher
- Ordentliche Strings, das Rumgefummel mit Chararrays fällt weg
- Wesentlich schnellerer Compiler (da kein Prä- und Postprocessing nötig) Herr Wirth hat gottlob keine Ahnung von Compilerbau gehabt ;)
- Bei Varparametern muss man nicht extra ref beim Aufruf schreiben
- Allgemeine Übersichtlichkeit, da nur an bestimmten Stellen Variablendeklarationen erlaubt sind
- Typsichere Casts mit As Operator

Wichtig:
Bei Case- Anweisungen werden die weiteren Cases NICHT abgearbeitet, also kein Break; mehr nötig

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 17, 2007 12:28 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Es gibt schon einen preprocessor, er beshränkt sich aber auf ifdefs und bei neuen delphis auch macros ohne parameter. Was fehlt sind echte Objekte die nicht über einen zeiger referenziert werden. Also kann man keine objekte auf dem stack anlegen. Das geht nur mit records(=struct) oder den alten pascalobjekten. Initialisierung von variablen ist auch möglich. bei neueren delphis über das var schlüsselwort, bei alten über const und {$J+}.

Aber im großen und ganzen sind die Sprachen sehr ähnlich (Delphi für Win32) und unmanged C++. Die syntax ist halt verschieden, und man verwendet halt die VCL anstelle von MFC oder so.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 19, 2007 20:58 
Offline
DGL Member

Registriert: Mi Jan 31, 2007 09:02
Beiträge: 28
super jungs,
hab mir eure listen mal ausgedruckt und werd mal anfangen ein paar tests zu starten
ihr koennt wohl damit rechnen dass zukuenftig hier mal die ein oder andere frage auftauchen wird
cherio and thx again
Woltan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 19, 2007 23:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Sidorion hat geschrieben:
In Delphi gibt es keine:
- Keine Initialisierung bei der Deklaration von Variablen (bei Konstanten schon)


noch nie ein
Code:
  1. var
  2.   I: Integer = 10;

gesehen? Geht aber nur im Globalen Bereich.

Auch schön:
Units können einen initialization und finalization bereich enthalten.
Der initialization-Teil wird beim starten des Projekts ausgeführt, finalization beim beenden.

Des weiteren: Es gibt keine Header-Dateien. Das ist alles in einer .pas.
Code:
  1.  
  2. unit Bla;
  3.  
  4. interface // öffentlicher teil, wie eine .h
  5.  
  6. uses // Alle Units, die verwendet werden, ähnlich wie include in c
  7.   Windows, SysUtils;
  8. // Unterscheidung zwischen prozeduren mit und ohne rückgabewert:
  9. function FooBar(const I: Integer): String;
  10. procedure BarFoo(const I: Integer);
  11.  
  12. implementation // privater teil, mit deklarationen für prozeduren und klassen
  13.  
  14. function FooBar(const I: Integer): String; // Strings werden automatisch verwaltet
  15. begin
  16.   Result := 'Quark'; // es gibt kein return, das Ergebnis wird über Result festgelegt. Austeigen kann man über Exit, muss man aber nicht.
  17.   if I = 0 then // Zuweisungen in if-klauseln sind ungültig; = ist ein vergleichsoperator
  18.   begin
  19.     Result := Result + IntToStr(I);
  20.     Exit;
  21.   end;
  22.   Result := Result + IntToStr(I+1);
  23. end;
  24.  
  25. procedure BarFoo(const I: Integer);
  26. var
  27.   A: Integer;
  28. begin
  29.   A := I;
  30. end;
  31.  
  32. end. // Ende der Unit
  33.  


Das wars eigentlich.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 20, 2007 07:26 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Noch ein sehr angenehmer Unterschied: Bei Funktionen/Prozeduren ohne Übergabeparameter kann man die leeren Klammern hinten weglassen bzw. bei ifs mit nur einer Bedingung muss diese auch nicht geklammert werden. Dies fällt mir im Moment umso mehr auf, da ich grad meinen Horizont auf C# erweitere.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 20, 2007 13:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Was mir auch gerade noch einfällt:
Gute ressource mit Tutorials zu Delphi: dsdt.info. Allerdings stell keine Frage ohne vorher die Tuts gelesen und bei google gesucht zu haben. Ich weiss zwar nicht, ob DragonsLair da noch aktiv ist, aber wenn ja... Naja, er kann unfreundlich werden :wink:

Es gibt natürlich noch eine menge weiterer Syntaktischer Unterschiede, aber dazu sollte man eher Tutorials lesen oder Quellcodes, falls man daraus lernen kann.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 20, 2007 13:32 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Sidorion hat geschrieben:
..., da ich grad meinen Horizont auf C# erweitere.


Eine weise Entscheidung.


Das mit den "keine klammern hinter den Funktionsaufruf" finde ich persönlich nervend. :D


In C++ sind übrigens auch Propertys möglich, wobei das nicht alle compiler unterstützen.
Was ich in Delphi angenehmer fand( Programmiere fast nur noch C# und etwas C++ ) als in C++ war der Umgang mit Arrays.

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 22, 2007 23:45 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Speedmaster hat geschrieben:
Was ich in Delphi angenehmer fand [...] als in C++ war der Umgang mit Arrays.

dito
und vorallem der Umgang mit Strings. Dieser Krampf ist ein Grund warum ich mit C/C++ nie war geworden bin. (Bin jetzt bei Java angekommen. ;) )

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 24, 2007 13:49 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Hi, bin auch mal wieder da. ;)

was habt ihr denn mit den Strings? Wenn man C verwendet, ist es ein wenig doof - zugegeben. Aber in C++ nimmt man das string template und hat die gleiche Funktionalität wie in Delphi. So Konstrukte wie:
Code:
  1. string x = "Hallo";
  2. string y= "Welt";
  3. string z = x + " meine " + y
  4.  

Gehen damit auch.
Sidorion hat geschrieben:
- Objektinstanzen sind gleichzeitig Zeiger, d.h. Dereferenzierung bei Memberzugriffen fallen weg und man muss nicht extra pointer für Funktionsaufrufe übergeben
...
- Bei Varparametern muss man nicht extra ref beim Aufruf schreiben

Die beiden Punkte versteh ich nicht ganz. Kannst Du mal ein Beispielcode geben? (Ich möchte hier übrigens kein C/C++ - Delphi Krieg lostreten sondern die Punkte wirklich wissen!)

Was bei Delphi noch dabei ist und bei C++ fehlt: der Datentyp of object. Damit kann man einfach die Adresse der Funktion eines Objektes speichern und hat dann beim Aufruf automatisch das Objekt dabei. Somit sind Callback-Funktionen innerhalb von Objekten überhaupt kein Problem - im Gegensatz zu C++. :(

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 25, 2007 07:09 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
zu 1:
Code:
  1.  
  2. var
  3.   oObj: TMyObj
  4. begin
  5.   oObj:=TMyObj.Create;
  6.   oObj.Foo:=12; //hier wird automatisch dereferenziert, ein -> ist also nie nötig
  7.   MyFuct(oObj); // hier wird ein Zeiger auf die Instanz übergeben PObj ist also nicht nötig
  8. end;
  9.  

Objektinstanzen sind also gleichzeitig Zeiger und Variablen, der Compiler weiss, was er tun muss.

zu 2:
Code:
  1.  
  2.   Procedure Bar(var _iValue: Integer); //var entspricht ref
  3.   Begin
  4.   ...
  5.   End;
  6.   ...
  7.   Bar(iMyValue); // ein erneutes Schreiben von var(ref) beim Aufruf ist nicht nötig.
  8.  

.. ist wohl der einzige Fall, wo C++ bei Aufrufen strikter ist als Pascal. In C wird man nochmals darauf hingewiesen, dass CallByReference vorliegt. Das gleiche gilt auch für out (und const). Zudem wird eine strikte Typprüfung vorgenommen und Konstanten sind hier garnicht möglich.

Bei 'of Object' wird implizit ein zusätzlicher versteckter Aufrufparameter vereinbart. Deswegen sind Delphi-Callbacks inkompatibel zu C/C++ Callbacks. Das muss man beachten, wenn man eine DLL schreibt. Dann muss man die Direktive StdCall hintanhägen.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 26, 2007 07:45 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Ich fang mal andersrum an. ;)

Zu 2.)

Code:
  1.  
  2. void myFnc(int &x)
  3. {
  4.   // What Ever
  5.   x = 12;
  6. }
  7.  
  8. int myInt;
  9. myFnc(myInt);
  10.  

Zusätzlich angeben muß ich da nix.

zu 1.)

Stimmt. In C++ hab ich entweder eine Funktion die eine Referenz oder einen Pointer möchte. Automatisches Casten iss nicht. Ich muß entweder ein * oder ein & davor stellen, je nachdem was ich habe oder was die Funktion als parameter möchte.

Ich hab früher viel mit Delphi gearbeitet - die ein oder anderen werden mich aus dem Forum oder soagar durch RealLive Konntakt ja noch kennen (Hallo Nico, Hallo Phob ;)). Wie dem auch sei, seit zwei Jahren arbeite ich beruflich mit C++. Ich muß sagen, das sich die Sprachen nicht viel schenken. Beide so ihr für und wieder. Beide haben so ihre "Maken" und "Eigenarten".

Aber ich denke mal, das der Umstieg von C/C++ auf Delphi weniger Probleme mit sich bringen dürfte! Im Prinzip ist es eh immer das gleiche: kennste eine, kennste alle. Klar haben die einzelnen Sprachen ihre besonderheiten, aber Programmieren selber ist nicht wirklich von der Sprache als eher von der Denkweiße des Entwicklers abhängig. Daher keine Angst: ist anders, dürfte aber keine größeren Probleme Darstellen. Außerdem hat Delphi 'ne gute Online-Dokumentation. :)

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 16 Queries | GZIP : On ]