[HowTo] Jetzt fange ich mit C++ an

Alles Wissenswerte über Skripte, Browser, Makros, PhP, HTML...

Moderatoren: Moderatoren, Redakteure

Benutzeravatar
Scorcher24_
Beiträge: 15527
Registriert: 11.11.2004 14:31
Persönliche Nachricht:

[HowTo] Jetzt fange ich mit C++ an

Beitrag von Scorcher24_ »

Nachdem immer wieder Leute auftauchen und genau das möchten, möchte ich ein kleines HowTo schreiben, wie man am besten anfängt.
Nein, ein Tutorial zu C++ wirds nicht geben. Aber ich werde euch zeigen wie man am besten anfängt, einige Resourcen aufzeigen und die wichtigsten Tools listen.

Was ist C++?

C++ ist eine Objektorientierte Sprache die erst vom Compiler in mehreren Schritten zu Assembler und dann zu Objektcode verarbeitet wird. Aus diesem Objektcode wird dann die Binär-Datei, unter Windows hat diese die Endung .exe für Executable (ausführbar).
Damit haben wir auch schon die 2 wichtigsten Dinge die wir brauchen: Compiler und Linker.

Wo bekomme ich einen Compiler her?

Erstmal sollte man sich entscheiden was man möchte. Möchte man gleich durchstarten mit einer sogenannten IDE oder möchte man "roh" auf der Konsole arbeiten und einem Editor?
Ich empfehle Anfängern immer mit einem Compiler auf der Console anzufangen. Warum?
Man bekommt besser ein Gefühl für das was hinter den Kulissen passiert und lernt wie verschiedene Dateien und Module in C++ zusammenarbeiten und ist immer gewappnet wenn man mal was manuell kompilieren muss. Ich werde nun die 2 gängigsten Compiler unter Windows listen.

Microsoft Visual C++ Express

Visual C++ ist nur der Name der IDE, nicht der Sprache. IDE heisst Integrated Developement Environment. Der Compiler liegt auch hier als Kommandozeilenprogramm vor, wird aber von der IDE aufgerufen und gleich danach der Linker. Der Compiler von Microsoft heisst "cl.exe".
Bekommen kann man das hier:
http://www.microsoft.com/germany/expres ... spx?p=vcpp
Das Programm ist kostenlos und das sogar für kommerzielle Programme. Allerdings kann diese Version keine Scripts und Macros. Sollte am Anfang aber nicht stören. Sollte man sich später die normale Version von Visual C++ zulegen wollen schlägt diese mit mehreren hundert Euro zu buche, die Professional sogar mit 800 Euro. Aber das sollte uns nicht weiter stören, die Express Edition hat ausser Macros und der Unterstützung für OpenMP keine Einschränkung. OpenMP braucht man aber auch nicht unbedingt.

MinGW

Das ist ein kostenloser und freier Compiler. Im Prinzip die Windowsversion vom gcc, dem Linux-Compiler. Dieser kommt allerdings ohne IDE daher. Diese muss/kann man sich kostenlos auf anderen Seiten runterladen, es gibt viele IDE für den MinGW.
Download des Compilers unter
http://mingw.org
Allerdings müsste man sich hier mehrere Pakete laden. Auf der Seite
http://sourceforge.net/projects/mingw/f ... e/download
kann man sich allerdings einen automatisierten Installer runterladen der den MinGW komplett installiert. Hat man das geschafft, steht die Wahl der IDE aus. Ich empfehle Anfängern immer gerne Codelite. Das ist eine einfache und übersichtliche IDE die gut geeignet ist. Ich möchte aber auch Code::Blocks empfehlen, die wirklich gut ist. Es gibt viele dieser IDEs, aber bitte: Finger weg von DevC++. Diese IDE ist alt und wird nicht mehr weiterentwickelt. Netbeans und Eclipse sind in Java geschrieben und daher für so ziemlich alle gängigen Betriebssystem verfügbar.
Bekannte kostenlose IDEs für Mingw:
Code::Blocks
CodeLite
Eclipse für C++
Netbeans für C++

Wer nur mit Hilfe eines Editors arbeiten möchte, dem seien folgende Programme ans Herz gelegt:
ConTEXT Editor
Programmers Notepad
Notepad++

Tutorials

Gute Tutorials sind die Basis um zu sehen ob einem die Sprache liegt. Es führt später KEIN Weg an einem Buch vorbei.
Ich empfehle dieses Tutorial:
http://ittk.falb.at/pt/unterlagen/vcppk/inhalt.html
Das ist von einem Moderator im C++-Forum. Sehr gut geschrieben.

Bücher

Es gibt viele Bücher aber einige seien erwähnt:

C++ Primer:
http://www.amazon.de/C-Primer-Stanley-B ... 382732274X

Vom Erfinder der Sprache Bjarne Stroustroup:
http://www.amazon.de/Einf%C3%BChrung-di ... 654&sr=1-3

Spiele

Nun, das ist ein Spieleforum und viele werden fragen:
Kann ich damit auch Spiele machen?
Die Antwort ist Ja. Allerdings ein Wort der Warnung. Spiele zu programmieren ist kein einfacher Task. Es erfordert gute Kenntnis der Sprache. Ausserdem muss man sich für eine Grafik-API entscheiden. Dort stehen DirectX und OpenGL zur Wahl.
Mein Favorit ist OpenGL weil es X-Platform ist und auf allen Systemen verfügbar ist in aktuellen Versionen. Es gibt für 2D-Spiele aber auch einige Bibliotheken die ein einfaches Interface für sowas zur Verfügung stellen. Aber bitte, lernt erst die Sprache und backt kleine Brötchen. Es gab schon sehr viele Leute die 3 Wochen lang Tutorials gelesen haben und dann durch die Foren wanderten und Leute für ein MMORPG gesucht haben. Von den wenigsten hat man je wieder etwas gehört ;).
Hier einige Resourcen für die Spielentwicklung:

DIE Referenz für OpenGL und C++. Sind auch im Web als deutsche Version verfügbar:
Nehe OpenGL Tutorials

DelphiGL ist eine Webseite die sich mit OpenGL unter Delphi beschäftigt, aber man kann auch als C++-Programmierer mit den Tutorials einiges anfangen, vor allem mit dem Wiki.
http://delphigl.com/

SDL ist ein Wrapper für Funktionen mit denen man 2D-Spiele erstellen kann. Einfacher und direkter Einstieg, Tutorials auch auf deutsch verfügbar. Allerdings in C und nicht Objektorientiert (was nichts ausmacht, da C und C++ kompatibel sind:
http://libsdl.org

SFML ist auch ein Wrapper für die Spieleprogrammierung, allerdings in C++ und Objektorientiert:
http://www.sfml-dev.org/

DirectX von Microsoft benötigt ein SDK-Download der alles nötige installiert. Dieser Download ist allerdings nur für Visual C++ Express gültig, bei MinGW ist eine übersetzte Version dabei wenn man den Installer nimmt:
http://www.microsoft.com/downloads/deta ... lang=en#dx

Hier sei euch aber ein Buch ans Herz gelegt, das ist wirklich ein Brocken. Die Lernkurve ist bei DirectX imho auch steiler als bei OpenGL.


Ich hoffe die Aufstellung hilft.
rya.
Benutzeravatar
Scorcher24_
Beiträge: 15527
Registriert: 11.11.2004 14:31
Persönliche Nachricht:

Beitrag von Scorcher24_ »

Bonus: Übersetzen des ersten Programms

Code: Alles auswählen

#include <iostream>

int main()
{
 std::cout << "Hello World" << std::endl;
}
Dieses Programm fügt Ihr in eine Datei mit dem Namen main.cpp ein.
Unter Microsoft Visual C++ erstellt man einfach ein leeres Konsolenprojekt, fügt die Datei ein und drückt F7. Fertig.

Beim MinGW ohne IDE öffnet man eine Kommandozeile in dem Pfad in dem die Datei liegt. Unter Win7 kann man einfach Shift gedrückt halten und in den Ordner rechtsklicken. Dann erscheint dort die Option dazu. Unter XP/Vista schreibt man unter "Ausführen" einfach cmd.exe rein und navigiert mit cd zu dem Ordner.
Der Installer fügt den Pfad vom MinGW der Path-Variable hinzu. Dadurch ist das Kommando global verfügbar.
Kompiliert wird mit:
g++ main.cpp -o HelloWorld.exe
rya.
PrinzToxic]
Beiträge: 48
Registriert: 02.09.2009 22:44
User ist gesperrt.
Persönliche Nachricht:

Beitrag von PrinzToxic] »

Mit der Anweisung using namespace std; nach der
#include-Direktive teilst du deinem Compiler schon am Anfang mit,
das alle Namen die im weiteren Code verwendet werden, sich auf den Namensraum std; beziehen.

So vermeidest du jeder Funktion den Text std:: voranstellen zu müssen.

Code: Alles auswählen

#include <iostream>
using namespace std;

int main() 
{
   cout << "Hello World" << endl;
} 
Dies trifft aber nur zu, wen dein Compiler den ANSI/ISO C++ Standard unterstützt.
Benutzeravatar
Levi 
Beiträge: 44988
Registriert: 18.03.2009 15:38
Persönliche Nachricht:

Beitrag von Levi  »

aber speziell in einen so kurzen Programm kann es nicht schaden, den Leuten auch mal zu zeigen wies eigentlich "richtig" geht. Ich habe nen halbes Jahr lang damals nicht verstanden, was es mit diesen

Code: Alles auswählen

using namespace std;
auf sich hatte, weil unser Lehrer es nicht für nötig hielt, es genauer zu erklären :D ... ergo: um den Kinderchen beizubringen, was das ist, kann es nicht schaden, ihnen es jedes mal schreiben zu lassen, kurz erklären warum: "gehört zu den Funktionen aus den std-Namensraum" ... und nach ca 3-4 Wochen wird dann mal darauf hingewiesen, dass man den häufigst benutzten Namensraum mit

Code: Alles auswählen

using namespace blub
festlegen kann ;)
Benutzeravatar
Scorcher24_
Beiträge: 15527
Registriert: 11.11.2004 14:31
Persönliche Nachricht:

Beitrag von Scorcher24_ »

PrinzToxic] hat geschrieben:Mit der Anweisung using namespace std; nach der
#include-Direktive teilst du deinem Compiler schon am Anfang mit,
das alle Namen die im weiteren Code verwendet werden, sich auf den Namensraum std; beziehen.

So vermeidest du jeder Funktion den Text std:: voranstellen zu müssen.

Code: Alles auswählen

#include <iostream>
using namespace std;

int main() 
{
   cout << "Hello World" << endl;
} 
Dies trifft aber nur zu, wen dein Compiler den ANSI/ISO C++ Standard unterstützt.
Ich benutze Visual C++ Professional. Der ist Standard-Conform ;).
Allerdings verwende ich using namespace std so gut wie nie. Natürlich hätte ich das verwenden können, aber wegen 2x std:: spar ich mir das.
rya.
PrinzToxic]
Beiträge: 48
Registriert: 02.09.2009 22:44
User ist gesperrt.
Persönliche Nachricht:

Beitrag von PrinzToxic] »

Scorcher24 hat geschrieben:
PrinzToxic] hat geschrieben:Mit der Anweisung using namespace std; nach der
#include-Direktive teilst du deinem Compiler schon am Anfang mit,
das alle Namen die im weiteren Code verwendet werden, sich auf den Namensraum std; beziehen.

So vermeidest du jeder Funktion den Text std:: voranstellen zu müssen.

Code: Alles auswählen

#include <iostream>
using namespace std;

int main() 
{
   cout << "Hello World" << endl;
} 
Dies trifft aber nur zu, wen dein Compiler den ANSI/ISO C++ Standard unterstützt.
Ich benutze Visual C++ Professional. Der ist Standard-Conform ;).
Allerdings verwende ich using namespace std so gut wie nie. Natürlich hätte ich das verwenden können, aber wegen 2x std:: spar ich mir das.
rya.
Bei sehr kleinen Quelltexten sind Ausnahmen denkbar :wink:
Aber ich hätte ehrlich gesagt, den oben beschriebenen Code etwas anders geschrieben:

Code: Alles auswählen

#include <iostream>
using namespace std;

void main(void)
{
   cout << "Hello World";
   cout << endl;
}
Für mich gestallten sich dies übersichtlicher.
Benutzeravatar
Scorcher24_
Beiträge: 15527
Registriert: 11.11.2004 14:31
Persönliche Nachricht:

Beitrag von Scorcher24_ »

Entschuldige, das ist nicht böse gemeint, aber das sind persönliche Präferenzen die einem HowTo nicht diskutiert werden sollten.
rya.
PrinzToxic]
Beiträge: 48
Registriert: 02.09.2009 22:44
User ist gesperrt.
Persönliche Nachricht:

Beitrag von PrinzToxic] »

Schon gut. Rück mir damit nicht auf die Pelle.
Forget it.