C zu C++ - Einfacherer Übergang?
-
namespace invader schrieb:
1. ist nicht so richtig einzusehen, warum jemand nur C++ und absolut nicht C lernen will
Aus dem selben Grund warum ich Visual Basic .NET lernen will ohne vorher Visual Basic 6 gelernt zu haben. Weil sie eben nicht nur unterschiedliche Sprachen sind, sondern auch unterschiedliche Denkweisen verlangen.
Bei der Programmierung geht es doch zu einem grossen Teil nur um Denkweisen. Wenn man Java programmiert muss man in Java denken, wenn man C programmiert muss man in C denken. Warum sollte ich nun lernen wie ich in C denke wenn ich garnicht in C programmieren will?
Und wenn man anschließend C++ lernt, wird man das meiste von C ohnehin noch brauchen.
Nur dass dann so Sachen wie RAII wie du ja an dir selber siehst problematisch werden.
2. enthält C++ nunmal viele "alte" Sprachbestandteile aus C, es ist nicht aus einem Guss und enthält viele redundante Features. Also z.B. sowohl Pointer als auch Referenzen für Call-by-Reference,
Diese Features sind nicht redundant. Aber ja C++ enthaelt eine Menge features - nur warum ist es wichtig zuerst die Untermenge zu lernen und dann einen Teil davon zu vergessen und dann die richtige Menge zu lernen?
zB Fehlerbehandlung in C, generizitaet ueber void* und makros, makros statt inline templates - eben eine komplett andere Denkweise -> wozu das lernen um es wieder zu vergessen?
Wenn man C++ lernt, ohne C zu kennen, verwirrt einen das alles, weil man nicht nachvollziehen kann, was diese ganzen doppelten Features sollen und was sich die Sprachdesigner dabei gedacht haben.
Deine private Meinung die leider unhaltbar ist. Da schon millionen Leute C++ ohne C vorkenntnisse gelernt haben und nicht verwirrt waren.
Zumindest bei einer gut designten Sprache. Dass man die Unmengen von Features von C++, die teilweise auch noch redundant und unnötig kompliziert sind, als Anfänger gar nicht alle wirklich verstehen kann und damit gezwungen ist, die Benutzung der Sprachfeatures, also Herangehensweisen usw., in Form von den ganzen "C++ Idioms" zu erlernen und die dahinter verwendeten Sprachfeatures erst nach und nach zu verstehen, ist ein C++-spezifisches Problem.
Nein. Man lernt immer Idiome. Idiome sind die anfassbaren Teile der Denkweise.
while(*trg++=*src++);
Das ist ein Idiom in C dass jeder kennen muss. Genauso ist RAII ein Idiom in C++ das jeder kennen muss. Idiome sind die Ausdruecke der Denkweise.
Und dabei hilfreich sind C-Kenntnisse einerseits, weil man dann die aus C übernommen Teile schonmal versteht, und andererseits, weil man, wenn man die Unzulänglichkeiten und Beschränkungen von C kennt, besser die Motivation der C++-Designer nachvollziehen und die dabei herausgekommen C++-Features besser verstehen kann.
Und das alles ohne Smalltalk Kenntnisse? Wie soll man die C++ features ohne smalltalk verstehen? Oder Java ohne C?
Das macht keinen Sinn. Eine Sprache wird von vielen Seiten beeinflusst, es macht vielleicht aus akademischer Sicht Sinn alle Einfluesse genau zu kennen, aber aus pragmatischer Sicht sind die vollkommen uninteressant.
Lehre mal Leuten die C++ lernen wollen zuerst die Denkweise von C und dann die von C++ und schau was rauskommt. Du kannst das wunderschoen hier im Forum bestaunen. Naja, das Problem wird sein, dass du den Unterschied halt nicht verstehst, aber das Resultat ist dann eben ein C mit Klassen. Nur C mit Klassen ist eine Katastrophe.
Aus dem Naehkaestchen geplaudert:
Mein Tutorial ist zwar schon recht alt aber ich habe immer wieder unterhaltungen mit Leuten die es lesen um C++ zu lernen. Und da hat sich fuer mich klar rauskristallisiert (wie eben im Forum auch) dass C zuerst zu lernen eine schlechte Idee.Diese Meinung teilen uebrigens auch alle C++ groessen
Siehe zB: http://www2.research.att.com/~bs/learn.html
Oder auch die offizielle FAQ von alt.comp.lang.learn.c-c++: http://www.faqs.org/faqs/C-faq/learn/
Und bedenke, diese Meinung haben Leute die sowohl C als auch C++ sehr gut kennen, waehrend du nur C gut kennst und ueber C++ nur mutmassungen anstellst.Wem soll man mehr vertrauen?
-
und wie erklärt man das Öffnen eines Files in C++ ohne auf C-Spezialitäten wie char* zurückzugreifen ?
myIfstream.open(myFileName.c_str(),...)
c_str() ist dann eine Methode, die einen string ... verzaubert
-
zum Beispiel schrieb:
und wie erklärt man das Öffnen eines Files in C++ ohne auf C-Spezialitäten wie char* zurückzugreifen ?
Warum sollte man das tun wollen?
char* ist Teil von C++.Ich erklaere ja auch int, double, float,... warum dann nicht char*?
Oder meinst du char* ist C und std::string ist C++? Weil dann hast du nicht viel verstanden...
Die Frage ist doch eher:
warum sollte ich
fopen(file, "r")
erklaeren um dann naechste Woche
ifstream f(file);
erklaere?Das verwirrt die Leute. Eine Erklaerung dass ein String in C++ nunmal ein char* ist, verwirrt dagegen nicht. Denn ein String in C++ ist nunmal ein char*. std::string ist ein Helferlein um den Umgang mit rohen char* zu vereinfachen.
Bitte kommt von dieser Verirrung weg, dass alles was man in C macht in C++ nicht gemacht werden sollte. Das ist schwachsinn. Wenn man sagt C++ ist eine andere Sprache als C, dann meint man die Denkweise und die herangehensweise an Probleme. Aber einen int oder eine struct verwende ich in C++ immer noch gleich.
Genauso wie ich einen int auch noch in Java verwenden darf... Die Syntax ist halt sehr aehnlich... Aber syntax ist syntax und nicht semantik. Ein char* wird in C++ semantisch etwas anders verwendet als in C.
-
namespace invader schrieb:
bleibt folgendes übrig: "Ich glaube, dass es besser ist, vor C++ die Sprache C zu lernen, weil C++ auf C basiert und Sprachfeatures hinzufügt."
Ja genau. Zumindest dann, wenn man vorhat, beides zu lernen; und erst recht, wenn man (wie der OP) noch gar nicht weiß, ob man überhaupt auch C++ lernen will.
Wer C++ lernt, lernt C gleich mit. IMHO ist es für den C++-Lernwilligen unsinnig, zuerst C und dann C++ zu lernen.
Wer aber C++ nicht lernen mag oder muß, der kann selbstverständlich nur C lernen.
-
veritySeeker schrieb:
Wer C++ lernt, lernt C gleich mit.
Falsch. Einfach nur falsch..
-
Janjan schrieb:
veritySeeker schrieb:
Wer C++ lernt, lernt C gleich mit.
Falsch. Einfach nur falsch..
Du meinst also, man sollte doch zuerst C lernen?
Etwas mehr solltest Du schon dazu schreiben.
-
Shade Of Mine schrieb:
Denn ein String in C++ ist nunmal ein char*.
über diesen Satz muß ich erst meditieren
Bis dahin:
Shade Of Mine schrieb:
std::string ist ein Helferlein um den Umgang mit rohen char* zu vereinfachen.
ja, und wie erklärt man das einem C++ noob, ohne auf C zurückzugreifen ?
"das könnt Ihr jetzt mal nicht verstehen" oder wie
-
Das Problem, wenn man zuerst C lernt, besteht vor allem auch darin, dass der Grossteil des Codes weiterhin funktioniert. Man ist nicht gezwungen, die C++-Äquivalente zu verwenden, weil die C-Mittel immer noch auszureichen scheinen.
Man hat sich als C-Programmierer für viele Bereiche schon Techniken angeeignet, auf die man nicht ohne Weiteres verzichtet. Ich habe den Eindruck, vielen Programmierern fällt es schwer, alte Gewohnheiten abzulegen und sich aktiv mit Alternativen auseinanderzusetzen, da dazu kein zwingender Grund besteht. Doch auf diese Weise lernt man nichts Neues, C++-Spezifisches. Wenn man hingegen direkt mit C++ anfängt, besitzt man noch keine Herangehensweisen an Probleme und muss diese von Grund auf neu lernen, und zwar direkt in C++.
Das ist auch kein C-spezifisches Problem. Im C++-Forum sieht man immer wieder, wie z.B. Java-Umsteiger Mühe haben, weil sie überall
new
verwenden und mit Wertsemantik nicht vertraut sind. Bei Sprachen, die sich oberflächlich so ähnlich sind, werden die Unterschiede meistens unterschätzt.
-
veritySeeker schrieb:
Janjan schrieb:
veritySeeker schrieb:
Wer C++ lernt, lernt C gleich mit.
Falsch. Einfach nur falsch..
Du meinst also, man sollte doch zuerst C lernen?
Etwas mehr solltest Du schon dazu schreiben.Damit meine ich, dass man C nicht gleich mit lernt, wenn man C++ lernt. Ist auch gar nicht notwendig. printf, malloc und all den restlichen C müll kann man getrost weglassen.
zum Beispiel schrieb:
Shade Of Mine schrieb:
std::string ist ein Helferlein um den Umgang mit rohen char* zu vereinfachen.
ja, und wie erklärt man das einem C++ noob, ohne auf C zurückzugreifen ?
"das könnt Ihr jetzt mal nicht verstehen" oder wie
Dann schneidet man das Thema C-Strings an, erklärt wie sie arbeiten (roher Speicher, \0-terminiert) und erzählt auch gleich was für eine Qual es ist damit zu arbeiten.
-
veritySeeker schrieb:
Janjan schrieb:
Falsch. Einfach nur falsch..
Du meinst also, man sollte doch zuerst C lernen?
Etwas mehr solltest Du schon dazu schreiben.Janjan mag C nicht und ist wohl der Meinung, man solle C gar nicht lernen, weder einzeln noch mit C++ mit.
-
zum Beispiel schrieb:
Shade Of Mine schrieb:
std::string ist ein Helferlein um den Umgang mit rohen char* zu vereinfachen.
ja, und wie erklärt man das einem C++ noob, ohne auf C zurückzugreifen ?
Wer sagt denn, dass man nicht auf C zurückgreifen darf? Wie schon erwähnt finden sehr viele Dinge aus C weiterhin Anwendung in C++. Aber für sehr viele Dinge gibt es eben auch Alternativen.
-
namespace invader schrieb:
veritySeeker schrieb:
Janjan schrieb:
Falsch. Einfach nur falsch..
Du meinst also, man sollte doch zuerst C lernen?
Etwas mehr solltest Du schon dazu schreiben.Janjan mag C nicht und ist wohl der Meinung, man solle C gar nicht lernen, weder einzeln noch mit C++ mit.
Stimmt nur zum Teil. Ich mag C in der Tat nicht, bin trotzdem der Auffassung man sollte es lernen. Ich bin auch der Meinung, man sollte Assembler lernen. Alleine um ein Gefühl und Wissen darüber zu kriegen, was im Hintergrund bei "höheren Sprachen" passiert.
-
zum Beispiel schrieb:
Shade Of Mine schrieb:
std::string ist ein Helferlein um den Umgang mit rohen char* zu vereinfachen.
ja, und wie erklärt man das einem C++ noob, ohne auf C zurückzugreifen ?
"das könnt Ihr jetzt mal nicht verstehen" oder wie
Wie erklaerst du jemanden in C++ was eine Funktion ist?
Du sagst: das ist eine Funktion:
void foo() {}
Wie erklaerst du jemanden in C++ was ein string ist?
Du sagst: das ist ein String:char const* str="hallo welt";
Ist das echt so schwer zu verstehen?
Da muss man kein C erwaehnen. "hallo welt" ist nunmal einchar const*
.Ist es etwa kein C++ weil ich einen char* habe? Dann ist es unmoeglich C++ code zu schreiben denn jede C++ Anwendung hat char*.
-
zum Beispiel schrieb:
Shade Of Mine schrieb:
Denn ein String in C++ ist nunmal ein char*.
über diesen Satz muß ich erst meditieren
Bis dahin:
Shade Of Mine schrieb:
std::string ist ein Helferlein um den Umgang mit rohen char* zu vereinfachen.
ja, und wie erklärt man das einem C++ noob, ohne auf C zurückzugreifen ?
"das könnt Ihr jetzt mal nicht verstehen" oder wie
Nach dieser Logik müsste man einem Java Programmierer zuerst C erklären, weil er float, double, int, usw. in seinem Programm benutzt
Es gibt nicht nur die Programmiersprache C, welche mit rohen Zeigern umgeht. Man muss doch jemandem nicht gleich ganz C erklären, nur weil man rohe Zeiger verwendet. Was ist denn das für eine seltsame und beschränkte Logik?
@namespace invader,
Eine Frage:
Jemand, welcher C++ gut findet und C++ verteidigt, welcher aber durchaus kritische Dinge an C++ sieht, nur nicht die deinigen, ist für dich automatisch ein C++ Enthusiast und Fanboy, da man C++ schliesslich objektiv einfach nicht gut finden kann?@All,
Geht es nur mir so, oder kommen immer nur Leute aus anderen Sprachen in dieses C++ Forum, um C++ an Stellen zu kritisieren, wo man nur merkt, dass sie C++ gar nicht richtig können? Ich bin auch in ein paar Java & C# Foren unterwegs, sehe dort aber eigentlich nie Leute aus der C++ Ecke vorbeikommen, um mit völligem Unwissen über diese Sprachen zu lästern. Ist das Neid, weil sie nicht in der Lage waren, C++ zu verstehen?Grüssli
-
Dravere schrieb:
@namespace invader,
Eine Frage:
Jemand, welcher C++ gut findet und C++ verteidigt, welcher aber durchaus kritische Dinge an C++ sieht, nur nicht die deinigen, ist für dich automatisch ein C++ Enthusiast und Fanboy, da man C++ schliesslich objektiv einfach nicht gut finden kann?Nein (bzw. allenfalls ein Enthusiast, was ja nichts schlechtes ist). Aber wenn Leute mit anderer Meinung als Trolle beschimpft oder ihnen Inkompetenz oder Unkenntnis von C++ vorgeworfen wird, hat das nichts mehr mit sachlicher Argumentation zu tun.
Geht es nur mir so, oder kommen immer nur Leute aus anderen Sprachen in dieses C++ Forum
Das hier ist kein C++-Forum, sondern ein Forum über C und C++ (und noch einiges anderes). Das C++-Unterforum befindet sich hier.
-
Assalamu Alaikum Wa Rahmatullahi Wa Barakatuh,
Janjan schrieb:
veritySeeker schrieb:
Janjan schrieb:
veritySeeker schrieb:
Wer C++ lernt, lernt C gleich mit.
Falsch. Einfach nur falsch..
Du meinst also, man sollte doch zuerst C lernen?
Etwas mehr solltest Du schon dazu schreiben.Damit meine ich, dass man C nicht gleich mit lernt, wenn man C++ lernt. Ist auch gar nicht notwendig. printf, malloc und all den restlichen C müll kann man getrost weglassen.
Masha'Allah ist C Bestandteil von C++, denn sonst würde viel fehlen.
Du lernst ganz automatisch C, wenn Du C++ lernst. printf und malloc sind nur Funktionen, kein Bestandteil der Programmiersprache.Barakallah Feek
-
veritySeeker schrieb:
Masha'Allah
Gesundheit.
veritySeeker schrieb:
printf und malloc sind nur Funktionen, kein Bestandteil der Programmiersprache.
Die Standardbibliothek ist Teil der Sprache.
-
Dravere schrieb:
@All,
Geht es nur mir so, oder kommen immer nur Leute aus anderen Sprachen in dieses C++ Forum, um C++ an Stellen zu kritisieren, wo man nur merkt, dass sie C++ gar nicht richtig können? Ich bin auch in ein paar Java & C# Foren unterwegs, sehe dort aber eigentlich nie Leute aus der C++ Ecke vorbeikommen, um mit völligem Unwissen über diese Sprachen zu lästern. Ist das Neid, weil sie nicht in der Lage waren, C++ zu verstehen?Was auch immer "Leute aus anderen Sprachen" sind. Es gibt auch genügent Leute mit Ahnung, die über C++ Lästern, auch wenn es hier keiner wahr haben will.
-
Assalamu Alaikum Janjan,
Janjan schrieb:
veritySeeker schrieb:
printf und malloc sind nur Funktionen, kein Bestandteil der Programmiersprache.
Die Standardbibliothek ist Teil der Sprache.
Das ist ein weit verbreiteter Irrtum! Sprachdefinition und mitgelieferte Libraries sind verschiedene Dinge, Subhanallah!
Möge Allah Dich rechtleiten und Dir deinen Hochmut vergeben.
-