Kein Compiler ist 100% kompatibel mit ISO-C++. Das fängt schon mit
export an (wird gerade mal von Comeau C++ unterstützt). GCC ist da recht vorbildlich, MS Visual C++ eher weniger. Visual C++ bringt aber auch Abweichungen vom Standard ein, die ich für positiv halte, z. B. die Inline-Assembler-Syntax.
Zu den GUIs:
wxDevC++ beispielsweise ist, wie der Name sagt, auf
wxWidgets basiert. Da gibt es für die IDE Code::Blocks ein Designer-Plugin.
Nennenswerte Bibliotheken sind neben der Emba VCL und den Microsoft Foundation Classes (MFC) vor allem gtkmm als C++ Anbindung zu
GTK+ sowie
Qt. Damit erzielst du auch Plattformunabhängigkeit. Für GTK+ gibt es
Glade, für Qt gibt es den Qt-Designer. Es kann allerdings sein, dass du dann unter Windows mit
Cygwin Vorlieb nehmen musst.
Am besten dokumentiert ist meiner Meinung nach gtkmm. Du findest auf der GNOME-Entwicklerseite eine recht umfangreiche Einführung:
library.gnome.org/de...apter-basics.html.de
ÜBRIGENS: Es ist nicht wirklich üblich, Klassen vor der Algorithmierung zu machen. Machen wir auch nicht und fangen erst jetzt mit OOP an.
Zur Installation von gtkmm guckst du hier:
live.gnome.org/gtkmm/MSWindows
Und du wirst auf keinen Fall gezwungen, einen Designer zu benutzen, sondern du kannst die Bibliotheken auch von Hand ansteuern. Egal, was du vor hast, sinnvoll ist auf jeden Fall folgende Herangehensweise:
Erst C++ lernen, Konsolenanwendungen
Dann dir die Ansteuerung des Compilers bzw. die Integration in die IDE genauer ansehen
Dann ein Framework lernen, wie z. B. gtkmm
Dann den Designer lernen
Dann schauen, wie du Designer und Framework kombinierst
Gleich mit GUI anzufangen, ist in C++ absoluter Overkill und führt mit Sicherheit ins Lehre.
Zu theevilworm's Frage: << und >> haben Verschiedene Bedeutungen. Einmal Shift-Left und Shift-Right, einmal für Stream-Operationen. std ist ein Namensraum. Alles, was in
C#-Quelltext
1: 2: 3: 4:
| namespace std { ... } |
steht, gehört dazu. cout und cin sind Objekte, die die Stream-Objekte, die für die Standardeingabe- und Ausgabe stehen. Du "schiebst" also sozusagen einen String auf cout, wenn du
std::cout << "hallo\n"; schreibst. Und wenn du
using namespace std; schreibst, kannst du statt std::cout auch cout schreiben. iostream bzw. iostream.h sind Header. Du könntest es stattdessen auch im C-Stil machen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| #include <cstdio>
int main() { printf("Hallo Welt!\n"); return 0; } |
Allerdings hat die C++ Variante einige Vorteile. Sie ist halt nur beim Lernen der Sprache am Anfang hinderlich.
<< und >> können aber fast jede beliebige Bedeutung haben: In C++ kannst du ziemlich leicht Operatoren überladen.