PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie fange ich am besten mit C++ an?


WhiteVelvet
2004-06-11, 13:59:44
Übernächstes Semester möchte ich ein Computergrafik-Praktikum an der Uni belegen. Soweit ich weiss, werden wir dazu C++ programmieren, in Verbindung mit OpenGL und Qt. Nun habe ich zwar Ahnung von Java und PHP, aber null Ahnung von C++. Wie fange ich da am besten an? Welchen Compiler muss ich benutzen, damit ich portable Programme bekomme, damit nicht nur auf Windows-Systemen läuft. Und wie binde ich OpenGL und Qt ein? Ich denke ich schau mal, ob Markt&Technik ein Buch für mich hat, deren PHP-Lehrbuch hat mir sehr gut gefallen. Aber Ihr könntet mir schonmal einen Überblick geben :)

Exxtreme
2004-06-11, 15:45:32
NAja, um halbwegs portable C++-Programme zu schreiben eignet sich der GCC-Compiler. Dieser ist auf wirklich sehr vielen Plattformen verfügbar. Als Toolkit ist Qt zwar nicht schlecht aber wenn du wirklich "unabhängig" bleiben willst dan nimm lieber GTK(+).

govou
2004-06-11, 16:27:44
OpenGL: http://nehe.gamedev.net

Ansonsten: Learning by doing!

Corrail
2004-06-11, 16:51:04
Würde dir auch empfehlen dich ein wenig über glut oder SDL schlau zu machen. Mit diesen Bibliotheken kannst du einfach Fenster mit OpenGL Unterstützung öffnen.

WhiteVelvet
2004-06-11, 18:56:32
Ich muss aber Qt nehmen, weil es für den Kurs gefordert wird, dagegen bin ich machtlos ;)

marco42
2004-06-12, 17:32:01
Original geschrieben von WhiteVelvet
Ich muss aber Qt nehmen, weil es für den Kurs gefordert wird, dagegen bin ich machtlos ;)

Qt ist ganz ok, ansonste wuerde ja keiner dafuer bezahlen. :-)

Die Multiplatformunterstuetzung ist IMHO auch besser als bei GTK, es gibt da zwar auch noch wxWidgets, aber die gefallen mir vom Stil wieder nicht, vor allem aendern sich staendig die Python Binding. AFAIK ist die Qt-Doku auch die Beste und die Doku sollte nicht unterschaetz werden.

Vedek Bareil
2004-06-12, 18:14:33
Original geschrieben von WhiteVelvet
Nun habe ich zwar Ahnung von Java und PHP, aber null Ahnung von C++. Wie fange ich da am besten an? Welchen Compiler muss ich benutzen, damit ich portable Programme bekomme, damit nicht nur auf Windows-Systemen läuft. was verstehst du unter portabel? Daß du ein Programm nur einmal compilieren mußt und es dann auf verschiedenen Plattformen lauffähig ist? Das gibt's nur in Java.
Unter anderen Sprachen wie C++ muß du's für jede Plattform extra compilieren. Solange dein Programm aber keine plattformspezifischen Elemente (wie Zugriffe auf die Win32 API) enthält, kannst du den Quellcode dabei unverändert lassen, der ist dann so gesehen auch portabel. Der Compiler ist dann auch egal, denn jeder C++-konforme Quellcode sollte von jedem C++-konformen Compiler akzeptiert werden ;)


Und wie binde ich OpenGL und Qt ein? OpenGL einbinden ist noch ganz einfach:#include <gl/gl.h> ;)
Es auch zu nutzen, ist schon etwas komplizierter, da weiß ich nur wie man es unter Windows macht (siehe nehe-Tutorials), und das ist dann nicht mehr portabel.
Um Quellcode zu schreiben, der OpenGL nutzt und dennoch portabel sein soll, brauchst du vermutlich so wie GLUT, da kenne ich mich aber nicht mit aus.

marco42
2004-06-13, 00:59:53
Original geschrieben von Vedek Bareil

OpenGL einbinden ist noch ganz einfach:#include <gl/gl.h> ;)


#include <GL/gl.h> sonst kriegst du Probleme unter Unix.


Es auch zu nutzen, ist schon etwas komplizierter, da weiß ich nur wie man es unter Windows macht (siehe nehe-Tutorials), und das ist dann nicht mehr portabel.
Um Quellcode zu schreiben, der OpenGL nutzt und dennoch portabel sein soll, brauchst du vermutlich so wie GLUT, da kenne ich mich aber nicht mit aus.

Qt bietet eine Schnittstelle zu OpenGL und abstrahiert dabei GLX, WGL und AGL. Also in etwa was GLUT auch macht.

WhiteVelvet
2004-06-13, 13:01:58
Mit portabel meine ich, dass ich jetzt noch nicht weiss, auf welcher Plattform ich programmieren muss. Es kann UNIX sein, aber auch Windows.

Gast
2004-06-13, 13:30:40
Hallo,

wir (eine 4er gruppe) haben in diesem Semester eine Bildanalyse und Computergrafik VU (Vorlesung mit integrierter Übung).
Wir entwickeln alles mit C++ unter Linux (leider sind alle Testrechner Suse :-( ). Als Bibliotheken benutzen wir OpenGL, Qt, Coin (http://doc.coin3d.org/Coin), und noch zwei kleinere libs von den Coin Entwicklern.
Als Referenz für OpenGL Programming haben wir das Red Book verwendet, das du dir aus dem Netz saugen kannst.

Falls es dich interressiert, was bei uns so zu tun ist, kannst du dich hier (https://www2.icg.tu-graz.ac.at/BACGVIS/2004/) mal umschauen.

lg,
eine Gruppe, die sich gerade mit Raycasting und Raysplitting herumschlägt.

Vedek Bareil
2004-06-13, 22:14:07
Original geschrieben von Gast
Als Referenz für OpenGL Programming haben wir das Red Book verwendet, das du dir aus dem Netz saugen kannst.
URL?

Corrail
2004-06-13, 22:47:40
Original geschrieben von Vedek Bareil
URL?

http://www.gamedev.net/download/redbook.pdf
http://www.dcc.unicamp.br/~lmarcos/courses/mc603/redbook/
http://www.opengl.org/resources/code/basics/redbook/index.html

marco42
2004-06-14, 12:35:36
Original geschrieben von Corrail
http://www.gamedev.net/download/redbook.pdf
http://www.dcc.unicamp.br/~lmarcos/courses/mc603/redbook/
http://www.opengl.org/resources/code/basics/redbook/index.html

Ist das nicht Version 1.1? Ich wuerde schon eine spaetere Version empfehlen, da dort besser auf vertex arrays eingegangen wird. Das gibt es bloss nicht im Netz, man kann es aber gebraucht ganz preiswert bekommen.

Corrail
2004-06-14, 16:51:35
Original geschrieben von marco42
Ist das nicht Version 1.1? Ich wuerde schon eine spaetere Version empfehlen, da dort besser auf vertex arrays eingegangen wird. Das gibt es bloss nicht im Netz, man kann es aber gebraucht ganz preiswert bekommen.

Ja, das stimmt, ist Version 1.1 von http://www.opengl.org/documentation/red_book_1.0/

Trap
2004-06-14, 19:17:59
Da du schon PHP und vor allem Java kennst musst du hauptsächlich die Bibliotheken von und für C++ kennenlernen.

Ich würde http://www.josuttis.de/libbook/index.html empfehlen.
Für Qt einfach auf www.trolltech.no gucken, die haben eine sehr gute Doku. OpenGL ist auch in Qt integriert: http://doc.trolltech.com/3.2/opengl.html

Alex_K
2004-06-19, 22:11:24
Original geschrieben von Mr.B
Ansonsten: Learning by doing!

learning by doing ist sicher ein wichtiger teil um eine programmiersprache zu lernen.

aber nur learning by doing ist sicher der falsche weg. durch solche tutorials bekommt man zwar schnelle ergebnisse, jedoch wird einem auch immer nur ein kleiner teil des möglichem gezeigt. um wirklich einen kompletten überblick über eine programmiersprache zu bekommen, kommt man meiner meinung nicht um dicke bücher herrum. sonst kommt der typische C++ programmierer heraus, der C++ als C mit klassen einsetzt.

Metal Maniac
2004-06-19, 23:30:46
Original geschrieben von Alex_K
learning by doing ist sicher ein wichtiger teil um eine programmiersprache zu lernen.

aber nur learning by doing ist sicher der falsche weg. durch solche tutorials bekommt man zwar schnelle ergebnisse, jedoch wird einem auch immer nur ein kleiner teil des möglichem gezeigt. um wirklich einen kompletten überblick über eine programmiersprache zu bekommen, kommt man meiner meinung nicht um dicke bücher herrum. sonst kommt der typische C++ programmierer heraus, der C++ als C mit klassen einsetzt.

Ähm... aber C++ ist ja eigentlich nur ein objektorientiertes C... oder meinst Du Programmierer, die alles in eine einzige Klasse werfen?

Ich muss allerdings auch sagen, dass "learninig by doing" zwar in begrenztem Maße richtig ist, aber dennoch sollte man entsprechende Fachliteratur lesen um sich einen einigermaßen guten Programmierstil anzueignen. Produziert man viel "Spaghetti-Code" und lernt somit einen komplett falschen Stil kriegt man den nur schwer wieder los, was sich später ziemlich kontraproduktiv auswirken kann....

D-Swat
2004-06-20, 00:18:24
Original geschrieben von Metal Maniac
Ähm... aber C++ ist ja eigentlich nur ein objektorientiertes C...


C++ hat aber nochmehr zu bieten als 'nur' Klassen:
- Exceptions
- generische Programmierung
- überladen von Operatoren und Funktionen
- Namensräume
- reference typ

Hier (http://david.tribble.com/text/cdiffs.htm#C++-vs-C) gibts ne komplettere Übersicht.

Metal Maniac
2004-06-20, 00:42:29
Original geschrieben von D-Swat
C++ hat aber nochmehr zu bieten als 'nur' Klassen:
- Exceptions
- generische Programmierung
- überladen von Operatoren und Funktionen
- Namensräume
- reference typ

Hier (http://david.tribble.com/text/cdiffs.htm#C++-vs-C) gibts ne komplettere Übersicht.

Naja, gut, das sind alles Nebensächlichkeiten ;)
Aber das Wichtigste ist die OO finde ich, denn darin liegt die wahre Stärke, um strukturierte, flexible und skalierbare Projekte zu erstellen...

Corrail
2004-06-20, 10:27:24
Templates wurden noch nicht genannt und so "Kleinigkeiten" wie du sie nennst sind sie nicht. Heutzutage hat IMHO schon jede brauchbare Programmiersprache OO-Unterstützung (ich sag da absichtlich brauchbar, weil VB ist keine Programmiersprache... ;)) und da finde sind andere Features doch recht wichtig.
Vorallem Namespaces und Operator Overloading erleichtern die Programmentwicklung meist sehr!!

Metal Maniac
2004-06-20, 11:55:58
Original geschrieben von Corrail
Templates wurden noch nicht genannt und so "Kleinigkeiten" wie du sie nennst sind sie nicht. Heutzutage hat IMHO schon jede brauchbare Programmiersprache OO-Unterstützung (ich sag da absichtlich brauchbar, weil VB ist keine Programmiersprache... ;)) und da finde sind andere Features doch recht wichtig.
Vorallem Namespaces und Operator Overloading erleichtern die Programmentwicklung meist sehr!!

Das ist schon klar, das mit "Kleinigkeiten" war auch nicht ernst gemeint (deswegen auch der Smiley daneben). Aber der wichtigste Unterschied zwischen C und C++ ist meiner Meinung nach einfach die OO.

Corrail
2004-06-20, 12:18:37
Original geschrieben von Metal Maniac
Das ist schon klar, das mit "Kleinigkeiten" war auch nicht ernst gemeint (deswegen auch der Smiley daneben). Aber der wichtigste Unterschied zwischen C und C++ ist meiner Meinung nach einfach die OO.

Oh, sorry... Ein wenig mis(t)verstanden... ;)
Ja, da gebe ich dir Recht, OO ist schon das wichtigste. Könnte mir heutzutage keine großen Projekte ohne OO vorstellen...

Alex_K
2004-06-21, 14:11:42
Original geschrieben von Metal Maniac
Das ist schon klar, das mit "Kleinigkeiten" war auch nicht ernst gemeint (deswegen auch der Smiley daneben). Aber der wichtigste Unterschied zwischen C und C++ ist meiner Meinung nach einfach die OO.

ist schon richtig dass der unterschied zwischen c und c++ die OO ist.

die frag ist nur: was ist OO?
es gibt viele leute die aus nur tutorials lernen, oder mit ihrem c++ buch nach den ersten 200 seiten aufhören weil sie nun wissen was eine klasse ist, und denken dass man alles über OO weiß.

wie andere festgestellt haben gehört aber zur objektorientierung weit aus mehr als nur klassen. eben diese "kleinigkeiten" aber auch das wissen wie man klassen richtig einsetzt. z.b. bringt eine vererbung nicht immer einen vorteil nur weil man sich erspart hat ein paar zeilen zu schreiben (stichwörter: untertypbeziehung - codewiederverwendung).

Metal Maniac
2004-06-22, 01:43:19
Original geschrieben von Alex_K
ist schon richtig dass der unterschied zwischen c und c++ die OO ist.

die frag ist nur: was ist OO?
es gibt viele leute die aus nur tutorials lernen, oder mit ihrem c++ buch nach den ersten 200 seiten aufhören weil sie nun wissen was eine klasse ist, und denken dass man alles über OO weiß.

wie andere festgestellt haben gehört aber zur objektorientierung weit aus mehr als nur klassen. eben diese "kleinigkeiten" aber auch das wissen wie man klassen richtig einsetzt. z.b. bringt eine vererbung nicht immer einen vorteil nur weil man sich erspart hat ein paar zeilen zu schreiben (stichwörter: untertypbeziehung - codewiederverwendung).

Naja, Objektorientierung ist aber einfach die Einteilung in Klassen und davon abgeleitete Objekte, ganz so wie wir Menschen eigentlich die Umwelt wahrnehmen (z.B. Klasse: Haus, Objekt: Nachbarhaus). Ich empfinde allerdings Sachen wie Überladen von Operatoren, Templates und Exceptions eher als sinnvolle und durchaus nützliche Dreingaben, allerdings würde es auch (notfalls) ohne gehen. Der Schritt zur OO ist für mich jedoch so überragend, weil ich sehr lange gebraucht habe, das Konzept wirklich zu durchsteigen (wollte deswegen schon fast mein Studium schmeißen). Von Vererbung bin ich kein wirklicher Fan, da ich sie nur dann verwende, wenn sie auch tatsächlich Sinn macht, keine so unendlichen Vererbungshierarchien wie man sie immer wieder mal findet, wo in jeder Vererbungsstufe 'n paar Data-Member und Funktionen drin sind, ohne dass man mit der Klasse wirklich 'ne logische Verbindung herstellen könnte. Ich gebe auch einem schön strukturierten und logischen Programmaufbau Vorzug gegenüber Performance, außer es ist wirklich absolut notwendig, soviel Performance wie möglich rauszuquetschen...