| Autor |
Beitrag |
LuGo
      
Beiträge: 33
|
Verfasst: Mo 02.08.10 09:56
Hallo zusammen,
ich habe mir überlegt von Delphi auf C(++/#) zu wechseln. Das Argument das Hobbyprogrammierer mit kleinem Geldbeutel nur mit max. Delphi 7 (aus dem Jahre 2002) programmieren können, das ausschlaggebende. Aber bevor ich mich dann überstrürzt an C(++/#) ranmache, bräuchte ich noch weitere Inforamtionen zu C(++/#) überhaupt. Ich habe nämlich überhaupt keine Ahnung. Schön wäre noch in so einem ProConta System und der vergleich zu Delphi
Und was nett wäre, wenn ihr diesen Code in C(++/#) übersetzen würdet. Soll ein einfacher Taschenrechner sein:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure Button1.Click (TObject); var:Zahl1, Zahl2, Ergebnis: Integer; begin Zahl1:=StrToInt(Edit1.Text); Zahl2:=StrToInt(Edit2.Text); Ergebnis := Zahl1+Zahl2; Label1.Caption := ('Ergebnis:' + Ergebnis')
end; |
Und ich möchte euch bitten keine Diskussion, wie vor 14 Tagen (Delphi am Rande) vom Zaun zu brechen.
Danke
LuGo
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mo 02.08.10 10:09
Hallo,
ich kann zwar kein Delphi, aber ich denke ich habe den Code verstanden.
In C# würde der Code dann wie folgt aussehen (das Event Click von Button1 muss dabei registriert sein, hier der EventHandler):
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| private void Button1_Click(object sender, EventArgs e) { int zahl1 = int.Parse(Edit1.Text); int zahl2 = int.Parse(Edit2.Text); int ergebnis = zahl1 + zahl2;
label1.Text += "Ergebnis: " + ergebnis.ToString(); } |
Über die Argument pro und contra musst du dir selber klar werden. Wichtig finde ich immer, was man eigentlich damit machen will und wie die langfristigen Ziele aussehen. In der Windows-Entwicklung mit GUI ist für mich C# gesetzt.
Gruß
|
|
LuGo 
      
Beiträge: 33
|
Verfasst: Mo 02.08.10 11:15
Was braucht man eigentlich dazu, um mit c++ arbeiten zu können???
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mo 02.08.10 11:16
Einen Editor und einen Kompiler.
Ist dir der Unterschied zwischen C++, Visual C++ und C# klar?
Wenn nicht mach dich bitte schlau und vermeide die Sprachen wie wild durcheinander zu werfen.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 02.08.10 15:12
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Mo 02.08.10 16:21
elundril hat folgendes geschrieben : | | Das += sollte man noch zu einem = umformen oder? Sonst hat man nach den zweiten Klick dann spätestens sowas dastehen: Ergebnis: 5Ergebnis: 7. Und das is ja ned schön. Deswegen sollte man den text im Label nicht anfügen sondern ersetzen. |
Das kommt darauf an. Wenn man nur das aktuelle Ergebnis haben will, hast du recht; dann gehört ein einfaches Gleichheitszeichen hin. Wenn man auch die vorherigen Ergebnisse anzeigen will, ist += korrekt, und dann am besten zusammen mit Environment.NewLine.
Jürgen
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Mo 02.08.10 18:55
Dein Programm hat keine eindeutige C++ Übersetzung. Es gibt eben mehrere Möglichkeiten, GUIs zu erstellen. Als Konsolenanwendung würde das ungefähr so aussehen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| #include <iostream> #include <cstdlib>
int do_add(char *, char *);
int do_add(char *arg1, char *arg2) { int zahl1, zahl2, ergebnis;
zahl1 = atoi(arg1); zahl2 = atoi(arg2); ergebnis = zahl1 + zahl2;
return ergebnis; }
int main() { char zahl1[10], zahl2[10];
std::cout << "Geben Sie zwei Zahlen durch Lehrzeichen getrennt ein: "; std::cin >> zahl1 >> zahl2; std::cout << " = " << do_add(zahl1, zahl2) << std::endl;
return 0; } |
Compiler: MS Visual C++ Express, MinGW, Cygwin (Linux Kompatibilitätsschicht), Intel C++
IDE: MS Visual C++ Express, Code::Blocks, Eclipse mit Plugin
Wenn du was kostenloses suchst: Code::Blocks mit beliebigem Compiler, dazu das wxWidgets-Plugin -> GUI Designer
Buch: C++ Objektorientiertes Programmieren von Anfang an, Helmut Erlenkötter, rororo, 10.95 €
Jedenfalls: C++ ist nicht so viel schwerer als C# (zumindest der Teil von C++, den du täglich brauchst). Hauptnachteil ist aber, dass für grafische Oberflächen keine so schöne Lösung wie in Delphi oder C# existiert.
Zuletzt bearbeitet von Jakob_Ullmann am Do 05.08.10 10:55, insgesamt 2-mal bearbeitet
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 02.08.10 19:01
Für C++ kann ich auch das hier empfehlen.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Chemiker
      
Beiträge: 194
Erhaltene Danke: 14
XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
|
Verfasst: Mo 02.08.10 20:47
Hallo,
| Jakob_Ullmann hat folgendes geschrieben: | | Hauptnachteil ist aber, dass für grafische Oberflächen keine so schöne Lösung wie in Delphi oder C# existiert. |
Wie meinst Du das? Unter C++ Builder und VS 2010 C++ geht es eigentlich genauso wie unter Delphi.
Bis bald Chemiker
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 02.08.10 22:01
Ich habe am Wochenende gerade mit C++ gearbeitet, da ich einige Modifikationen an UltraVNC vorgenommen habe. Alleine die Kompilierzeit jedesmal...
Visuelle Oberflächen sind so eine Sache, da kann man ziemlich viele Varianten nutzen, jeweils mit Vor- und Nachteilen.
Keine davon kommt aber so richtig an Delphi oder C# heran. Wenn die Wahl besteht, würde ich jederzeit zu C# tendieren. Da hat man dank des .NET Frameworks sehr sehr viele Grundlagen, die man in C++ mühsam basteln oder als Quelltext finden müsste.
Nur wegen anderen Plattformen wie Linux würde ich C++ nehmen.
Ich selbst benutze Visual Studio 2008 Professional, die Express Editions davon sind schön und kostenlos.
|
|
CSMN
      
Beiträge: 43
Erhaltene Danke: 2
|
Verfasst: Di 03.08.10 11:06
du kannst auch mit c# für linux und mac programme schreiben - siehe mono.net
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Di 03.08.10 19:57
Also zu der Übersetzung des Taschenrechners in C++. Ich habe mal schnell mit Anjuta + Glade + GTK+ (in C) einen Mini-Addierer geschrieben. Ich hänge den jetzt mal nicht an, es geht ja nur darum, einen Eindruck von der Sprache zu vermitteln. Ist natürlich C und nicht C++, weil Anjuta nur für C Methoden-Stubs generieren kann, aber so stark unterscheiden sich jetzt C und C++ auch wieder nicht. atoi() und reverse() sind schnell die in Wikipedia abgeschriebene Kerningham&Ritchie-Implementierungen kopiert, weil ich keine Lust hatte, das jetzt zu schreiben. Ansonsten aber eigentlich brauchbar.
Header callbacks.h
C#-Quelltext 1: 2: 3: 4: 5:
| #include <gtk/gtk.h>
extern GtkWidget *zahl1, *zahl2, *ausgabe;
void destroy (GtkWidget *widget, gpointer data); |
Source callbacks.c
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83:
| #ifdef HAVE_CONFIG_H # include <config.h> #endif
#include <stdio.h> #include <stdlib.h> #include <string.h>
#include "callbacks.h"
void itoa(int n, char s[]) { int i, sign; if ((sign = n) < 0) n = -n; i = 0; do { s[i++] = n % 10 + '0'; } while ((n /= 10) > 0); if (sign < 0) s[i++] = '-'; s[i] = '\0'; reverse(s); }
void reverse(char s[]) { int i, j; char c; for (i = 0, j = strlen(s)-1; i<j; i++, j--) { c = s[i]; s[i] = s[j]; s[j] = c; } }
void add_up (int n1, int n2) { char s[20]; itoa(n1 + n2, s); gtk_label_set_text (GTK_LABEL(ausgabe), (gchar*)s); }
void destroy (GtkWidget *widget, gpointer data) { gtk_main_quit (); }
void on_button1_clicked (GtkButton *self, gpointer user_data) { int a1, a2; a1 = atoi((char*)gtk_entry_get_text (GTK_ENTRY(zahl1)) ); a2 = atoi((char*)gtk_entry_get_text (GTK_ENTRY(zahl2)) ); add_up(a1, a2); } |
Source main.c
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94:
| #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <string.h> #include <stdio.h>
#include <config.h>
#include <gtk/gtk.h>
#ifdef ENABLE_NLS # include <libintl.h> # undef _ # define _(String) dgettext (PACKAGE, String) # ifdef gettext_noop # define N_(String) gettext_noop (String) # else # define N_(String) (String) # endif #else # define textdomain(String) (String) # define gettext(String) (String) # define dgettext(Domain,Message) (Message) # define dcgettext(Domain,Message,Type) (Message) # define bindtextdomain(Domain,Directory) (Domain) # define _(String) (String) # define N_(String) (String) #endif
#include "callbacks.h"
#define UI_FILE "src/gtk_taschenrechner.ui"
GtkWidget *zahl1, *zahl2, *ausgabe;
GtkWidget* create_window (void) { GtkWidget *window; GtkBuilder *builder; GError* error = NULL;
builder = gtk_builder_new (); if (!gtk_builder_add_from_file (builder, UI_FILE, &error)) { g_warning ("Couldn't load builder file: %s", error->message); g_error_free (error); }
gtk_builder_connect_signals (builder, NULL); window = GTK_WIDGET (gtk_builder_get_object (builder, "window")); zahl1 = GTK_WIDGET (gtk_builder_get_object (builder, "entry1")); zahl2 = GTK_WIDGET (gtk_builder_get_object (builder, "entry2")); ausgabe = GTK_WIDGET (gtk_builder_get_object (builder, "label2"));
g_object_unref (builder); return window; }
int main (int argc, char *argv[]) { GtkWidget *window;
#ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #endif
gtk_set_locale (); gtk_init (&argc, &argv);
window = create_window (); gtk_widget_show (window);
gtk_main (); return 0; } |
gtk_taschenrechner.ui ist sowas wie eine DFM in Delphi, bloß eben von Glade generiert. Habe ich jetzt nicht hier, also nicht wundern.
ÜBRIGENS: Angeblich soll es Glade auch für Windows geben (logisch, GTK+ gibt es ja auch für Windows). Hab's aber nicht ausprobiert.
Zu den Sourcen: die Klammern sind hier etwas verrutscht, sorry.
Zuletzt bearbeitet von Jakob_Ullmann am Do 05.08.10 10:27, insgesamt 4-mal bearbeitet
|
|
guinnes
      
Beiträge: 182
Erhaltene Danke: 14
|
Verfasst: Mi 04.08.10 09:13
Ob ich nach der Enthüllung noch C++ machen möchte.....
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Mi 04.08.10 16:47
Als nächstes sollten wir vor dem Internet warnen!
EDIT: pro-contra für C++:
Contra:
- du kannst mit C++ ziemlich viel Unsinn anstellen (Pointer, Makros, Casts), da du mehr Freiheiten hast
- manchmal eine "read-only"-Sprache. Z. B. kommen Pointern eine größere Rolle zu. Es gibt kein ISO-Pendant zu dynamischen Arrays. Entweder macht man das als verkettete Liste oder mit der STL std::vector-Klasse. Letzteres macht es auch automatisch, ohne dass du dich um Speicherverwaltung kümmern musst, ist aber nicht so "magisch" wie in Delphi.
- GUI-Design nicht so einfach wie in Delphi. Für GTK+ und wxWidgets gibt es aber brauchbare Lösungen, die dir die Arbeit wenigstens vereinfachen.
Pro:
- du bist nicht an eine bestimmte Firma und deren Launen sowie deren Marketing-Inkompetenz gebunden. Es gibt bei C++ kein wirkliches Monopol. Allerdings halten sich nicht alle Compiler an den ISO-Standard. Vorbildlich, aber dennoch nicht 100% kompatibel, ist da GCC, Microsoft nimmt es mit Standards wie so oft nicht so genau (z. B. sind nicht alle vergeschriebenen Funktionen aus der math.h / cmath implementiert).
- du hast mehr Freiheiten
- du kriegst gute Tools kostenlos und frei
- du hast die Möglichkeit, mit etwas Aufwand plattformunabhänhige Programme zu schreiben.
- du hast Sprachfeatures wie den Operator +=, ?:, generische Templates, die Möglichkeit, Operatoren zu überladen (hast du in neueren Delphi-Versionen, aber ist glaube ich kein ISO-Standard [-> Pro#1], und eben nicht in D7).
Auf jeden Fall ist C++ Geschmackssache.
Bei C# sehe ich lediglich die Nachteile, dass du keine Pointer hast, und, dass du an MS gebunden bist (abgesehen von Mono, was aber imho noch nicht für den professionellen Einsatz reif ist). Auf der anderen Seite nimmt es dir aber auch jede Menge Arbeit ab.
|
|
Chemiker
      
Beiträge: 194
Erhaltene Danke: 14
XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
|
Verfasst: Mi 04.08.10 23:58
Hallo,
vielleicht als weitere Entscheidungshilfe. Einfach mal nachsehen mit welcher Programmiersprache MS Office 2010 geschrieben worden ist.
Bis bald Chemiker
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Do 05.08.10 11:06
Hab Chemikers Beitrag gar nicht gemerkt.
Chemiker hat folgendes geschrieben : | Hallo,
| Jakob_Ullmann hat folgendes geschrieben: | | Hauptnachteil ist aber, dass für grafische Oberflächen keine so schöne Lösung wie in Delphi oder C# existiert. |
Wie meinst Du das? Unter C++ Builder und VS 2010 C++ geht es eigentlich genauso wie unter Delphi.
Bis bald Chemiker |
Sicher, aber ihm ging es ja um den Preis. Und C++ Builder ist ja genauso teuer wie Delphi. Und Visual Studio ist auch nicht gerade billig. Es gibt zwar eine kostenlose Express-Version, allerdings hast du mit VC++ Express die Microsoft Foundation Classes (MFC) nicht. Du kannst also lediglich C++ für .NET oder die Win32-API nutzen, wenn du eine GUI haben willst. Das halte ich aber für (C++ .NET) nicht sinnvoll bzw. (Win32-API) viel zu kompliziert. Man kann also nur andere Frameworks wie Qt, GTK+ (bzw. gtkmm), wxWidgets "von Hand" bedienen oder eben dazu noch andere Designer nutzen (Glade für GTK+, Code::Blocks wxWidgets Plugin, Nokia's QtDesigner), was sich dann aber etwas komplizierter gestaltet.
Unter GNU/Linux hast du die Möglichkeit, Anjuta mit integriertem Glade (und DevHelp Plugin) zu nutzen. Für Windows hast du diese IDE nicht. Das geht zwar dann auch ganz gut, aber es ist halt nicht integriert und du hast dann immer noch die Aufgabe, dich um Sachen wie das Verknüpfen von Callback-Funktionen zu kümmern. Dafür sind solche Lösungen kostenlos, leistungsfähig und plattformunabhängig.
PS: glade.gnome.org/ . Also ja, gibt es auch für Windows.
EDIT: Habe gerade gelesen, dass es für GNOME und Anjuta die Möglichkeit gibt, das mit Cygwin zu nutzen.
Zuletzt bearbeitet von Jakob_Ullmann am Do 05.08.10 11:31, insgesamt 2-mal bearbeitet
|
|
12profi
      
Beiträge: 170
Win 7
C# (VS 2010, #Develop)
|
Verfasst: Do 05.08.10 11:07
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 05.08.10 12:56
Wie wärs mit Java? Sehr schöne, objektorientierte Sprache. Platform-unabhängig und weit verbreitet. Außerdem gibt es schöne kostenlose IDEs (Eclipse und NetBeans).
+ Garbage Collection
+ Platform Unabhängigkeit
+ "von Grund auf" Objektorientiert
+ Viele Bibliotheken
+ Weit verbreitet
- Java Runtime Environment vorausgesetzt
Dass Java langsam ist, ist übrigens so auch nicht (mehr) richtig. Durch dynamische Optimierung holt die JVM noch einiges an Performance raus.
Siehe auch: de.wikipedia.org/wik...konzepte_der_Sprache
C#-Quelltext 1: 2: 3: 4: 5:
| public class HalloWelt { public static void main(String[] args) { System.out.println("Hallo Welt!"); } } |
und: de.wikipedia.org/wiki/Java-Syntax
Dein Code (so oder so ähnlich) in Java:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| public void buttonClick(Object o) { int zahl1, zahl2; zahl1 = Integer.valueOf(edit1.getText()); zahl2 = Integer.valueOf(edit2.getText()); int ergebnis = zahl1 + zahl2; label1.setText("Ergebnis:" + ergebnis); } |
|
|
Critter
      
Beiträge: 328
Erhaltene Danke: 3
Windows 7
Delphi 7 Pro.
|
Verfasst: Do 05.08.10 13:22
Hallo,
ich würde vorschlagen, probiere es einfach aus. Denke dir ein kleines Projekt aus, z. B. ein kleiner Taschenrechner mit den vier Grundrechenarten (in Anlehnung an dein Eröffnungspost), lade dir für jede der Sprachen, die dich interessieren Kostenlose Werkzeuge herunter und Implementiere es in jeder der Sprachen. Ich denke so wirst du an ehesten feststellen können welche der Sprachen dir am Besten gefällt. Denn Diskussionen welche Sprache die besser ist führen zu nichts. Es ist schlicht Geschmackssache also probiere selbst und frage nicht dritte wie es schmeckt  .
Mögliche Tools für Windows:
C++
C#
Andere User werden dir sicher noch andere Empfehlen können. Wenn du auch Java in Erwägung ziehen willst darf natürlich auch Eclipse nicht ungenannt bleiben.
critter
_________________ Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Do 05.08.10 14:32
Das stimmt, Java ist wirklich eine sehr schöne Sprache.
Als IDE kann ich auch Eclipse empfehlen. NetBeans ist sicherlich Geschmackssache (besonders wegen seiner guten Unterstützung für GUIs), aber für Anfänger IMHO ungeeignet (setzt viel voraus, während du bei Eclipse direkt mit Tutorials überflutet wirst).
Tutorials (englisch): download.oracle.com/...rial/java/index.html
PS: nochmal zu Glade: OK, ist halt schon ziemlich mächtig. Man muss halt umdenken, wenn man damit arbeiten will. Du kannst Elemente nicht absolut positionieren, sondern nur durch Boxen eine Einteilung vornehmen. Das heißt, dass du die Oberfläche im Voraus mit Bleistift und Papier planen musst, was aber manchen Anwendungen auch sonst gut täte.
|
|
|