Hallo, Ich möchte c bzw c++ lernen. -macht es sinn mit c anzufangen? oder soll ich gleich mit c++ einsteigen? -welche Bücher könnt ihr mir empfehlen? Danke im voraus... stone
Ich dachte da eher an Pc-programmierung... habe allerdings keinerlei kentnisse in c bzw c++
Von den beiden ganz klar mit C, zum Anfang ist das Buch "Programmieren in C" von K&R keine schlechte Investition. Je nachdem, was Du aber tatsächlich hinterher damit machen willst, wäre vielleicht zum Einstieg eine ganz andere Sprache sinnvoll....
Hängt davon ab was du machen willst. Ist aber immer auch eine Glaubensfrage, mit was für ner Sorte Sprache man anfängt (hoher vs niedriger Abstraktionsgrad etc). Gibts im Netz und auch hier im Forum massenhaft Diskussionen dazu ;)
Und es geht los... Ja, Python ist nett, aber nicht für alles das richtige... @all: können wir versuchen auf Empfehlungen zu verzichten bevor wir wissen was der TO machen will / schon kann? Sonst artet es nur wieder in eine Schlammschlacht aus.
Also im Moment bewege ich mich im html bereich und ich wollte einfach mal was neues versuchen in dem ich evtl sogar aufgehen kann so wie in html... Danke für die vielen Antworten ;-)
Lerne objektorientierte Programmierung mit C++, dazu den Stroustrup kaufen und dann eine passende IDE mit Syntaxhighlight und für Window-Programmierung gleich QT nehmen. C ist bei µCs OK aber auch hier wird schon C++ eingesetzt (vor allem bei größeren Controllern wie ARM).
Wenn Du objektorientiert programmieren lernen möchtest, dann würde ich C++ lernen und nicht mit C beginnen, sonst "denkst" Du laufend prozedural und programmiert auch so. Wenn Du Mikrocontroller programmieren möchtest, würde ich C lernen, z.B. mit http://ET-Tutorials.de/Mikrocontroller .Dort gibt es einen guten C VIDEO-Kurs.
Mit dem bin ich gut zurecht gekommen: C++ Primer http://www.amazon.de/C-Primer-Stanley-B-Lippman/dp/0201721481
Gordon schrieb: > Wenn Du objektorientiert programmieren lernen möchtest, dann würde ich > C++ lernen und nicht mit C beginnen, sonst "denkst" Du laufend > prozedural und programmiert auch so. Ich würde genau das Gegenteil empfehlen ;-) Wer richtig programmieren lernen will, der sollte prozedurale und objektorientierte Programmierung beherrschen (richtig verstehen was der Unterschied ist, entscheiden wann man besser prozedural, und wann man besser objektorientiert programmiert). Möchte man einfach nur möglichst schnell zu Ergebnissen kommen, fängt man besser gleich mit C++ an. Aber ob man dann die Sprache auch wirklich verstanden hat, wage ich zu bezweifeln. Ausserdem ist C++ ja quasi eine Erweiterung von C, daher liegt es irgendwie auch relativ nahe, dass man am besten mit den Basics, also C, beginnt. Beherrscht man C einigermassen (inkl. Pointern!), kann man auf C++ "upgraden" und noch die objektorientierte Programmierung lernen. Praktisch alles, was man in C lernt, ist ja auch für C++ gültig, ist also keine verschwendete Zeit wenn man mit C beginnt und dann auf C++ wechselt. Und zum Schluss dann noch z.B. Qt lernen für die grafische Oberfläche.
Ich bin nicht ganz derselben Meinung wie mein Vorrender. Der Programmierstil unterscheidet sich schon enorm zwischen C und C++, und C und C++ mit Qt sind meiner Meinung nach zwei völlig verschiedene Welten. C++ mit Qt und Python mit Qt sind sich jedenfalls ähnlicher als C und C++ mit Qt.
Sven B. schrieb: > Der Programmierstil unterscheidet sich schon enorm zwischen C und C++ Das ist so nicht korrekt.
1 | int main(void){int a = 5; return 0;} |
War das C oder C++? Siehst du, kann man nicht sagen, da es beides sein könnte ;-) Erst durch die objektorientierte Programmierung entstehen wirkliche Unterschiede. Ich bin aber der Meinung, dass es nicht schadet, wenn man beides (prozedural + objektorientiert) beherrscht. Es muss nicht sein, doch ich finde, wenn man mit C (prozedural) beginnt, lernt man die Sprache besser kennen, weil man eben zwei unterschiedliche Seiten der Programmiersprache kennen lernt. OOP/C++ ist auch nicht immer das Mass der Dinge (siehe z.B. AVR). Es ist doch das selbe wie das Programmieren mit Notepad++ und Terminal, statt einer kompletten IDE. Ich habe früher auch direkt mit Delphi (OOP) angefangen. Ich konnte damit auch lauffähige Programme "zusammenbruzzeln". Doch verstanden habe ich das Zeug erst, als wir im Studium mit Notepad++ und Terminal begonnen haben. Pointern bin ich immer aus dem Weg gegangen, weil ich sie nicht verstanden habe. Doch als wir im Studium Speicherabbilder usw. gezeichnet haben, ist mir das alles klar geworden. Immer mehr wurde mir sogar klar, dass das, was ich bisher zu Hause programmierte, eine totale "Sauerei" war. Meine Programme liefen zwar immer, doch die Programmierung war jenseits von gut und böse. Daher meine Empfehlung: Zuerst mit den absoluten Basics beginnen - Notepad und Terminal bis Präprozessor, Compiler und Linker verstanden - prozedurale Programmierung (in C) bis Pointer, Structs usw. verstanden - Wenn das alles klar ist, mit OOP beginnen Sven B. schrieb: > C und C++ mit Qt sind meiner Meinung nach zwei völlig verschiedene Welten C mit Qt machen mMn gar keinen Sinn. Mit Qt würde ich erst beginnen wenn man C++ (OOP) im Griff hat, und dann gleich Qt mit C++, nicht mit C. Wie schon erwähnt: Man kann auch alles im Schnelldurchgang machen und gleich mit OOP und hübscher IDE beginnen, doch ob man dann das, was man tut, auch wirklich begriffen hat, ist dann eine andere Frage... ;-) Ist halt die Frage, ob der TO möglichst schnell zu Ergebnissen kommen möchte, oder ob er die Programmiersprache verstanden haben möchte.
Hi! Urban B. schrieb: > Sven B. schrieb: >> Der Programmierstil unterscheidet sich schon enorm zwischen C und C++ > > Das ist so nicht korrekt. >
1 | int main(void){int a = 5; return 0;} |
> War das C oder C++? Siehst du, kann man nicht sagen, da es beides sein > könnte ;-) Nun, klar, das ist aber trivial, weil C eben großteils ein Subset von C++ ist ;) Aber vergleiche mal den Code eines typischen C-Programms (git) mit dem eines typischen C++/Qt-Programms (keine Ahnung, kate) -- das ist echt völlig anders. [1] > Ich bin aber der Meinung, dass es nicht schadet, wenn man beides > (prozedural + objektorientiert) beherrscht. Da stimme ich auf jeden Fall zu. > Es muss nicht sein, doch ich > finde, wenn man mit C (prozedural) beginnt, lernt man die Sprache besser > kennen, weil man eben zwei unterschiedliche Seiten der > Programmiersprache kennen lernt. OOP/C++ ist auch nicht immer das Mass > der Dinge (siehe z.B. AVR). Ja, schon, aber irgendwie habe ich den Verdacht, dass diese Herangehensweise einige Leute auch zu ich-erfinde-immer-das-Rad-neu-Programmierern macht... > Es ist doch das selbe wie das Programmieren mit Notepad++ und Terminal, > statt einer kompletten IDE. Ich habe früher auch direkt mit Delphi (OOP) > angefangen. Ich konnte damit auch lauffähige Programme > "zusammenbruzzeln". Doch verstanden habe ich das Zeug erst, als wir im > Studium mit Notepad++ und Terminal begonnen haben. Dass man eine IDE erst dann benutzen sollte, wenn einem klar ist, wie man den ganzen Kram, den die tut auch von Hand macht, ist klar. Das ist ja fast bei allem so, Tools mit Automatiken sind genau dann wirklich gut, wenn man den automatisierten Vorgang auch von Hand selber machen könnte. > Immer mehr wurde mir > sogar klar, dass das, was ich bisher zu Hause programmierte, eine totale > "Sauerei" war. Diese Erkenntnis habe ich seit zehn Jahren regelmäßig ungefähr einmal im Jahr. ;) Ich denke, das gehört dazu beim programmieren. > Sven B. schrieb: >> C und C++ mit Qt sind meiner Meinung nach zwei völlig verschiedene Welten > > C mit Qt machen mMn gar keinen Sinn. Ja, geht auch gar nicht, ich meinte <C> und <C++ mit Qt>. > Wie schon erwähnt: Man kann auch alles im Schnelldurchgang machen und > gleich mit OOP und hübscher IDE beginnen, doch ob man dann das, was man > tut, auch wirklich begriffen hat, ist dann eine andere Frage... ;-) > Ist halt die Frage, ob der TO möglichst schnell zu Ergebnissen kommen > möchte, oder ob er die Programmiersprache verstanden haben möchte. Oder man macht beides: Mit allem auf einmal anfangen, aber dann nach ein paar Wochen alles wieder beiseite legen und nochmal ganz von vorne beginnen. Das ist wahrscheinlich sogar die beste Methode. Grüße, Sven _____ [1] Hört sich sogar deutlich unterschiedlich an, wenn man den Quellcode nach /dev/snd cat-et. ;)
Sven B. schrieb: > Dass man eine IDE erst dann benutzen sollte, wenn einem klar ist, wie > man den ganzen Kram, den die tut auch von Hand macht, ist klar. Als Anfänger ist einem das nicht so direkt klar, warum man sich mit solchem "Kinderkram" rumschlagen soll wenn es doch dafür eine IDE gibt (kann ich aus eigener Erfahrung sagen)^^ Sven B. schrieb: > Ja, geht auch gar nicht, ich meinte <C> und <C++ mit Qt>. Ach so, da habe ich dich falsch verstanden :-) Jup, so gesehen gibt es natürlich grosse Unterschiede, mit <C++/Qt>-Code ist man ziemlich schnell mal überfordert wenn man so ein Projekt zum ersten mal anschaut :-) Sven B. schrieb: > Oder man macht beides: Mit allem auf einmal anfangen, aber dann nach ein > paar Wochen alles wieder beiseite legen und nochmal ganz von vorne > beginnen. Das ist wahrscheinlich sogar die beste Methode. Ich vermute eher, man ist mit der Kombination C++/Qt ziemlich überfordert wenn man gleich damit beginnt. Da würde ich dann schon eher Schritt für Schritt vorgehen. mfg
Der Unterschied zwischen prozeduraler und objektorientierte Programmierung liegt in der Kapselung welche die Übersicht und einfache Erweiterbarkeit verbessert. Das ein C++ compiler C kann ist klar. Beispiel:
1 | //C-Code
|
2 | static int var=0; |
3 | |
4 | void setvar(int input) |
5 | {
|
6 | var = input; |
7 | }
|
8 | |
9 | int getvar() |
10 | {
|
11 | return var; |
12 | }
|
13 | |
14 | int main() |
15 | {
|
16 | setvar(99); |
17 | printf(%d, getvar()); |
18 | }
|
19 | |
20 | //C++ Code
|
21 | |
22 | class var |
23 | {
|
24 | private:
|
25 | int var=0; |
26 | |
27 | public:
|
28 | void setvar(int input) |
29 | {
|
30 | var = input; |
31 | }
|
32 | |
33 | int getvar() |
34 | {
|
35 | return var; |
36 | }
|
37 | |
38 | var(){} |
39 | ~var(){} |
40 | }
|
41 | |
42 | int main() |
43 | {
|
44 | new var; |
45 | var.setvar(99); |
46 | cout << var.getvar(); |
47 | delete var; |
48 | }
|
Eine Klasse kapselt die Prozeduren und durch die Vererbung lassen sich bereits bestehende Klassen mit deren Prozeduren einfach weiterverwenden:
1 | class morevar : public var |
2 | {
|
3 | private:
|
4 | int morevar; |
5 | |
6 | public:
|
7 | void setmorevar(int input) |
8 | {
|
9 | morevar = input; |
10 | }
|
11 | |
12 | int getmorevar() |
13 | {
|
14 | return morevar; |
15 | }
|
16 | |
17 | morevar(){} |
18 | ~morevar(){} |
19 | }
|
20 | |
21 | int main() |
22 | {
|
23 | new morevar; |
24 | morevar.setvar(99); |
25 | cout << morevarvar.getvar(); |
26 | morevar.setmorevar(55); |
27 | cout << morevarvar.getmorevar(); |
28 | delete morevar; |
29 | }
|
Das geht in C so nicht.
Ob C++ jetzt das beste ist Objektorientierung zu lernen ... zumindest für nen Anfänger glaube ich das nicht, da man sich da gleichzeitig mit den C-Besonderheiten UND OOP rumschlagen muss. Eine Sprache wie Python versteckt da einiges an grundlegendem Kram vor einem, den man auch irgendwann lernen sollte, aber dafür kann man sich intensiver mit OOP beschäftigen. (Python kann man durch jede höhere Programmiersprache mit OOP ersetzen, wobei es da auch durchaus Unterschiede in den Möglichkeiten und Konventionen gibt) OOP "richtig" zu können ist nämlich auch so ne Sache... wobei vermutlich die meisten Leute da nicht ewig weit sind und das wohl auch garnicht nötig ist fürn Anfang. Meine Empfehlung wäre daher: C oder C++, aber die Objektorientierung erst später wirklich vertiefen, oder dafür eine andere, höhere Sprache nehmen (Python. Meinetwegen Smalltalk, das ist sehr "pur" Objektorientiert, dafür nicht allzu verbreitet/praktisch anwendbar. ...) Gibt auch Leute die sagen Funktionale Programmierung leitet einen viel besser zur Objektorientierung, aber für einen Anfänger ist das mMn ohne passende Betreuung nix.
adsf schrieb: > Meine Empfehlung wäre daher: C oder C++, aber die Objektorientierung > erst später wirklich vertiefen, oder dafür eine andere, höhere Sprache > nehmen (Python. Meinetwegen Smalltalk, das ist sehr "pur" > Objektorientiert, dafür nicht allzu verbreitet/praktisch anwendbar. ...) Sehe ich nicht so, denn wenn man von Anfang an OOP betreibt ist das sinnvoller als erstmal Prozedural zu lernen um dann die Kaspelung neu erlernen zu müssen. Man könnte auch gleich mit UML und dann in Kombination mit EIFFEL arbeiten, nur ist in der Praxis C++ Standard, da C ein Subset ist lernt man das auch gleich mit und von der Kapselung abzulassen ist einfacher als sie auf prozuderale Programmierung anzusetzen. Meine Meinung.
cppler schrieb: > adsf schrieb: >> Meine Empfehlung wäre daher: C oder C++, aber die Objektorientierung >> erst später wirklich vertiefen, oder dafür eine andere, höhere Sprache >> nehmen (Python. Meinetwegen Smalltalk, das ist sehr "pur" >> Objektorientiert, dafür nicht allzu verbreitet/praktisch anwendbar. ...) > > Sehe ich nicht so, denn wenn man von Anfang an OOP betreibt ist das > sinnvoller als erstmal Prozedural zu lernen um dann die Kaspelung neu > erlernen zu müssen. Ich seh das eigentlich auch so. Die Leute, die objektorientiert anfangen wachsen auf natürliche Art und Weise in die für OOP notwendige Denkweise hinein. Leute die von der prozeduralen Welt kommen, haben deutlich Schwierigkeiten, ihre erlernte Herangehensweise über Bord zu werfen, während andersrum mit OOP aufgewachsene Leute kaum Schwierigkeiten haben, in die prozedurale Schiene einzusteigen. Ganz im Gegenteil gehen sie oft mit viel mehr Disziplin und weniger Schweinereien in die prozedurale Welt, weil ihnen das Konzept der Daten- UND Funktionskapselung in Fleisch und Blut über gegangen ist und sie eigentlich schnell den Dreh heraussen haben, wie man auch ohne Compilerunterstützung einige wesentliche Elemente und Prinzipien der OOP weiterhin benutzen kann. Ich schlag mich daher auch auf die Seite: C++ mit einer guten Literatur, die einen durch die Materie führt. Allerdings nur, wenn es um die Fragestellung 'C oder C++' geht. Wenn die Fragestellung eigentlich lautet Windows Programme zu schreiben, dann würde ich (selbst wenn ich eine Abneigung dagegen habe) zu C# tendieren. Machen wir uns nix vor. GUI Programme auf Windows brauchen eine ordentliche Unterstützung, die zb C# liefern kann.
Man kann auch mit C problemlos objektorientiert Programmieren, wie z.B. GTK und der Linux-Kernel beweisen.
1 | int *var_new(void) { |
2 | return (int*)malloc(sizeof(int)); |
3 | }
|
4 | |
5 | void var_set(int *v, int i) { |
6 | *v=i; |
7 | }
|
8 | |
9 | int var_get(int *v) { |
10 | return *v; |
11 | }
|
12 | |
13 | int var_delete(int *v) { |
14 | free(v); |
15 | }
|
16 | |
17 | int main(void) { |
18 | int *z = var_new(); |
19 | var_set(z, 42); |
20 | printf("%d", var_get(z)); |
21 | var_delete(v); |
22 | return 0; |
23 | }
|
Ob man nun var_set(z, 42) oder z.set(42) schreibt ist auch nur ein kosmetischer Unterschied.
Lukas K. schrieb: > Man kann auch mit C problemlos objektorientiert Programmieren natürlich kann man. Genauso wie man mit C++ grauslichen Code produzieren kann. Aber es macht einen Unterschied, ob ich mich für Selbstdiszipliin entscheide (die ich jederzeit über Bord werfen kann, selbst wenn ich es nicht merke), oder ob mir der Compiler auf die Finger klopft. > Ob man nun var_set(z, 42) oder z.set(42) schreibt ist auch nur ein > kosmetischer Unterschied. Auch richtig. Allerdings ist das auch nur der syntaktische Zucker den C++ mit sich bringt. OOP ist aber eine Philosophie, eine Denkweise, eine Art wie man Programmsysteme entwirft und aufzieht. Und die unterscheidet sich vom prozeduralen Ansatz. Hat mich selbst 2 Jahre gekostet, bis ich OOP verinnerlicht hatte und in letzter Konsequenz verstanden habe. Nach der ersten 1/2 Stunde C++ hatte ich auch das Gefühl, dass objektorientiertes Programmieren eigentlich sooo wild auch wieder nicht ist und das ich das schnell verstanden haben würde. Das bischen Syntax ..... Nun, gedauert hat es dann doch so um die 2 Jahre, bis ich es verinnerlicht hatte. Und da hatte ich schon 8 Jahre prozedurales Programmieren am Buckel.
Karl Heinz Buchegger schrieb: > Machen wir uns nix vor. GUI Programme auf Windows brauchen > eine ordentliche Unterstützung, die zb C# liefern kann. Jein, ob JAVA oder "JAVA-Clone" C# bleibt sich gleich aber relativ Plattform unabhängig und performant ist C++ mit QT. Ist meine Meinung.
Karl Heinz Buchegger schrieb: > Wenn die Fragestellung eigentlich lautet Windows Programme zu schreiben, > dann würde ich (selbst wenn ich eine Abneigung dagegen habe) zu C# Würde ich dem TE auch Empfehlen (oder Java) C++ und C sind auf dem PC aus heutiger Sicht genauso ein Krampf wie früher ASM vs C/C++ (bitte nicht hauen-> Überspitzte Formulierung!) gerade wenn der TE: stone schrieb: > bewege ich mich im html bereich und ich wollte > einfach mal was neues versuchen Wenn man sich dann etwas eingearbeitet hat und Merkt: Ich will doch Plattformunabhängig und "lowlevel" mit QT/C++ was machen steht ja einem Umstieg nix im Wege (außer das man sehr schnell all die kleinen Vereinfachungen vermisst welche einem C#/Java bietet...)
Moment, hast du gerade "Qt" und "Low Level" in einem Satz gesagt? Hast du mal geschaut, was die Qt-API so an Klassen hat? http://doc.qt.digia.com/qt/qcalendarwidget.html http://qt-project.org/doc/qt-4.8/qwebview.html http://doc.qt.digia.com/qt/phonon-videoplayer.html Wenn das für dich "Low-Level" ist, dann will ich nicht wissen, was "High Level" bedeutet? ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.