C++ Von C zu C++

ali7566

Lieutenant
Registriert
Feb. 2007
Beiträge
980
Hi leute,

ich habe jetzt einige monate intensiv mit C gearbeitet und bin dort auch ziemlich fit, zuvor hatte ich mit C# und java programmiert jedoch muss ich festellen das nach intensiven arbeiten mit C, C# echt total langweilig ist und mir einerseits auch zu einfach ist.

Daher möchte ich nun mit intensiver mit C++ arbeiten, jedoch weiß ich noch nicht so richtig wie ich denn das richtig angehe damit es im endeffekt kein c/c++ mischmasch wird.

Da ich Visual Studio 2010 nutze und dort auch das ganze .net paket enthalten ist würde es mich mal interessieren in wie fern das .net C++ sich programmiertechnisch und syntaxtechnisch vom Ansi C++ unterscheidet ?

Ich habe die letzte zeit über C von A bis Z gelesen, was ist vom C++ von A bis Z zu halten ?


Grüße Ali.
 
was ist vom C++ von A bis Z zu halten ?
imho nicht zu viel, ich würde dir klar zu einem der Standardwerke, nämlich dem "C++ Primer" und/oder "Die C++ Programmiersprache" raten.

Da ich Visual Studio 2010 nutze und dort auch das ganze .net paket enthalten ist würde es mich mal interessieren in wie fern das .net C++ sich programmiertechnisch und syntaxtechnisch vom Ansi C++ unterscheidet ?
Evtl. hilft dir das hier weiter: http://de.wikipedia.org/wiki/C++/CLI

Natürlich kann man unter VS auch in ganz normalen ANSI/ISO C++ programmieren.


C# echt total langweilig ist und mir einerseits auch zu einfach ist.
Es ist ja mitunter der Sinn einer Programmiersprache, nach Möglichkeit einen großen Funktionsumfang mit überschaubarer Schwierigkeit bereitzustellen. Dass man nach C solche Sprachen als "synthetisch" (ist nicht das richtige Wort, aber mir fällt nichts besseres ein) empfindet, kann ich nachvollziehen.


Gruß,

badday
 
Ja eigtl sollte die Schwierigkeit ja auch nicht durch die Sprache entstehen sondern durch das Problem! ;)
 
1668mib schrieb:
Also wenn ich die Features von C# anschaue, dann finde ich C++ langweilig...

Was für Features? C# und C++ sind ohnehin nicht vergleichbar, da C# eine interpretierte Sprache ist und auf dem .NET Framework aufbaut. Das Framework hat riesige Klassenbibliotheken (FCL) in denen jeder Dreck zu finden ist.

Während in C++ beispielsweise das FTP-Protokoll von Grund auf implementiert werden muss, kann man in C# direkt auf den Namensraum System.Net zugreifen und mal eben schnell die Klasse FtpWebRequest nutzen, weil irgend ein anderer Johnny das schon für einen selbst implementiert hat. Der DAU muss dann nur noch ein paar Methodenaufrufe durchführen und fertig. Er muss nicht einmal wissen was ein Protokoll überhaupt ist.

C++ ist die komplexere Sprache.

Ich würde allerdings weder C#, noch C++ als "langweilig" bezeichnen, zumal beide aus der C-Famile (Syntax) abstammen. Beides sind überaus interessante und umfangreiche Programmiersprachen mit individuellen Schwächen und Stärken.
 
Während in C++ beispielsweise das FTP-Protokoll von Grund auf implementiert werden muss, kann man in C# direkt auf den Namensraum System.Net zugreifen und mal eben schnell die Klasse FtpWebRequest nutzen, weil irgend ein anderer Johnny das schon für einen selbst implementiert hat. Der DAU muss dann nur noch ein paar Methodenaufrufe durchführen und fertig. Er muss nicht einmal wissen was ein Protokoll überhaupt ist.


Man muss das Rad doch nicht immer wieder neu erfinden. Das ist ja auch das tolle von freien bzw. bereits integrierten Bibliotheken und Funktionalitäten. Für die meisten Standardfälle reichen diese Lösungen doch vollkommen aus. Das sehe ich z.B. an ganz primitiver Ebene bei Java und Listen. Warum sollte ich mir hier selbst die Mühe machen, Listen from scratch zu implementieren, wenn ich auch die optimierten, integrierten Varianten nutzen kann? So kommt man viel schneller zum Ziel und außerdem: man kann davon ausgehen, dass diese Bibliotheken recht gut getestet sind - im Gegensatz zu den eigenen Rädern.
 
@Stefan_Sch:
Und C++ baut auf der STL auf könnt ich da sagen... hört sich aber irgendwie komisch an, oder? Eine Sprache ist an kein Framework gebunden bzw. baut schon gar nicht auf einem Framework auf.

Und mit der Sprache an sich hat auch nichts zu tun, ob am Ende ein natives Programm oder ob ein pseudo-interpretiertes Programm rauskommt.

Und Features wie Delegates , LINQ, anonyme Klassen, ... aber hier im Thread geht's nun nicht wirklich um "Was ist besser ?" und "Welche Programmiersprache kann ich mit welcher anderen vergleichen"
 
Ich habe mir einfach vorgenommen mit allen 3 sprachen weiterzuarbeiten C, c++ und C#.

So verschieden sind diese sprachen ja im prinzip ja nicht von daher dürfte das auch hinhauen.
 
1668mib schrieb:
@Stefan_Sch:
Und C++ baut auf der STL auf könnt ich da sagen... hört sich aber irgendwie komisch an, oder? Eine Sprache ist an kein Framework gebunden bzw. baut schon gar nicht auf einem Framework auf.

Das ist völliger Unsinn! Selbstverständlich baut C# auf dem .NET Framework. Ohne .NET Framework gibt es auch kein C#. Demzufolge ist C# an .NET gebunden, es können nur Sprachkonstrukte realisiert werden, die auf die MSIL in .NET abbildbar sind.

Und dein absurder Vergleich zwischen der STL und dem .NET Framework macht deine Argumentation auch nicht besser. Ersteres ist eine Programmbibliothek für die Programmiersprache C++, zweiteres eine komplette Software-Plattform.

1668mib schrieb:
Und mit der Sprache an sich hat auch nichts zu tun, ob am Ende ein natives Programm oder ob ein pseudo-interpretiertes Programm rauskommt.

Mit der Programmiersprache selbst nicht, aber mit dem Konzept. Interpretierte Sprachen eröffnen andere Möglichkeiten, wie Laufzeitoptimierungen seitens der virtuellen Maschine just in time. Das ist in Programmiersprachen, die nativ kompiliert werden so nicht realisierbar. Ergo wird in einer Sprache, wie C++ auch anders programmiert.

Reflection ist ein weiteres Beispiel für die konzeptionellen Unterschiede, die sich unmittelbar auf die Programmierung und die Möglichkeiten in der Sprache selbst auswirken.

1668mib schrieb:
Und Features wie Delegates , LINQ, anonyme Klassen, ... aber hier im Thread geht's nun nicht wirklich um "Was ist besser ?" und "Welche Programmiersprache kann ich mit welcher anderen vergleichen"

LINQ ist eine im .NET-Framework 3.5 eingeführte Erweiterungen, die anfragemanipulierende Erweiterungsmethoden anspricht, die zuletzt aus dem Anfrage-Ausdruck eine Gesamt-Anfrage generieren.

LINQ steht damit auch in Visual Basic und praktisch jeder anderen .NET Sprache zur Verfügung und zeigt recht eindeutig, wie stark der Zusammenhang zwischen .NET Plattform und der Programmiersprache C# ist.
 
Stefan_Sch schrieb:
Das ist völliger Unsinn! Selbstverständlich baut C# auf dem .NET Framework. Ohne .NET Framework gibt es auch kein C#. Demzufolge ist C# an .NET gebunden, es können nur Sprachkonstrukte realisiert werden, die auf die MSIL in .NET abbildbar sind.

Ach ja, deswegen wurde C# 2 Jahre vor .Net veröffentlicht ...
 
Whiz-zarD schrieb:

It was developed by Microsoft within the .NET initiative and later approved as a standard by Ecma (ECMA-334) and ISO (ISO/IEC 23270).

http://en.wikipedia.org/wiki/C_Sharp_(programming_language)

C# is one of the programming languages designed for the Common Language Infrastructure.

By design, C# is the programming language that most directly reflects the underlying Common Language Infrastructure (CLI). Most of its intrinsic types correspond to value-types implemented by the CLI framework.

Noch irgendwelche Fragen, Dude?

BTW: Lies dir das nächste Mal zur Abwechslung den gesamten Beitrag durch und versuche dann dagegen zu argumentieren. Du hast nicht einmal den Unterschied zwischen einer Sprachspezifikation und einer Plattformtechnologie verstanden.
 
Zuletzt bearbeitet:
kann dir empfehlen dich etwas mit OSG anzulegen. das belohnungszentrum wird regelmäßig mit 3d ausgabe belohnt :)

kannst das auch mit dem QT-framework kombinieren, bekommst allerhand brauchbare komponenten, die dich schneller zum ziel führen.
 
Also will auch mal meinen Senf dazugeben:

a.) weiß ich nicht so recht was der Tipp mit OSG soll, da der Author garnichts von Grafiken geschribeen hat (oder?)
b.) sprachenlernen sollte imho kein selbstzweck sein sondern immer an eine aufgabenstellung gebunden sein. und da treten die utnerschiede von c# und c++ doch recht schnell an die oberfläche. und da gibts dann genausowas wie famework etc. bei c++ haste halt alle möglichkeiten, suchst aber oftmals erst nach ner passenden libary etc. da ist c#dann doch sehr angenehm, halt zum preis der Bindung an das famework.
 
right, der weg ist das ziel.. statt abstraktes wieder zu geben, gabs von mir einfach beispiele.
könnte tausende nennen.. bücher gibts auch zu hauf.. auf den tischen ist meist "Efficient C++" die standard-lektüre.

falls interesse an paralleler c++ programmierung, wirf auch ein blick auf OpenMP.
wenns nicht unbedingt c++ seien muss, schau dir auch "Embarcadero Delphi" an - wunderschöne sprache.

etwas spaciger kannst es mit funktionalen programmiersprachen haben, stichwort "Standard ML".
 
ali7566 schrieb:
Daher möchte ich nun mit intensiver mit C++ arbeiten, jedoch weiß ich noch nicht so richtig wie ich denn das richtig angehe damit es im endeffekt kein c/c++ mischmasch wird.

Ganz einfach. Vergiss bzw. ignoriere alles was du über C gelernt hast und fang von vorne an. ;) Klingt komisch, ist aber der wirklich saubere Weg. Auch wenn C und C++ einen vermeintlich großen Satz an Übereinstimmungen haben, programmiert man C++ wirklich von Grund auf anders.

Empfehlen kann ich dir "C++ lernen und professionell anwenden" von Ulla Kirch-Prinz / Peter Prinz.

Dazu noch "C++ Coding Standards: 101 Rules, Guidelines and Best Practices" von Alexandrescu / Sutter und die ganze Efficent / Effective C++ Reihe. Viel Stoff... und geht leider auch etwas ins Geld, was die Bücher angeht.

(Zur allgemeinen Diskussion - C++ ist die komplexere Sprache (Betonung auf Sprache - mit Libraries hat das nix zu tun). Ist eine Typ-1 Sprache in der Chomsky-Hierarchy (kontext-sensitiv), was nur wenige Sprachen von sich behaupten können. Edit: (nicht dass diese Komplexität unbedingt etwas gutes wäre... aber ich mag C++ trotzdem =))).
 
Zuletzt bearbeitet:
Also der Grund warum ich überhaupt C++ gewählt habe ist das ich später mal ernsthaft in die Spieleprogrammierung einsteigen möchte und zwar beruflich.

Und ja ich bin mir über das viele mathe und die Komplexität sehr wohl bewusst.

Da ja C++ dafür die geläufigste sprache wegen der Performance etc. ist wird es wohl auch das beste sein diese intensiv zu lernen.

Nun hab ich aber ein Buch über XNA mit C# bekommen, welches die Basics der Spieleprogrammierung lehrt, daher werde ich nun doch erstmal mit C# die Basics über die Spieleprogrammierung reinziehen, ich denke das wird mir später vom verständnis etwas mehr bringen.
 
C++ ist keine schlechte Wahl, aber ich bin mir nicht so sicher, ob C++ die Spieleprogrammierung noch lange dominieren wird, oder ob es das überhaupt noch tut. Mit den immer schneller werdenden Rechnern der letzten Jahre zieht das Performance-Argument nicht mehr so stark wie es das noch vor 10 Jahren getan hat - zu mal Java und C# in dieser Hinsicht auch stark aufgeholt haben.
 
Stefan_Sch schrieb:
Selbstverständlich baut C# auf dem .NET Framework. Ohne .NET Framework gibt es auch kein C#. Demzufolge ist C# an .NET gebunden, es können nur Sprachkonstrukte realisiert werden, die auf die MSIL in .NET abbildbar sind.
Bauen deiner Meinung nach Menschen auf der Sonne auf? Ohne Sonne gibt es keine Menschen. Und die MSIL ist ebenfalls eine Sprache...

Dein Zitat aus Wikipedia ist aber sowas von nichts-bringend. Die Sprache wurde innerhalb der .NET-Initiative entwickelt, ja. Es ist auch die Sprache schlechthin für .NET. Deshalb sagte ich auch salopp, dass LINQ ein C#-Feature ist, was zugegeben nicht die ganze Wahrheit ist. Nichtsdestotrotz gibt es keinen Grund, warum es keinen anderen Compiler geben könnte, der C#-Code in ein anderes "Ergebnis" compiliert. Warum denn auch? Dass es wohl keinen gibt liegt daran, dass der Bedarf nicht groß ist und C# sich im .NET-Framework nun mal sehr wohl fühlt, weil es wie gesagt die .NET-Sprache ist.
Natürlich wurde C# für die CLI entwickelt, da widerspreche ich dir nicht. Teflon wurde mal für die Raumfahrt entwickelt und heute haben wir's in den Pfannen...

Stefan_Sch schrieb:
Ergo wird in einer Sprache, wie C++ auch anders programmiert.
Anders? Wie anders?

LINQ ist eine im .NET-Framework 3.5 eingeführte Erweiterungen [...]
Richtig, LINQ ist ein .NET-Feature, da widerspreche ich dir nicht. Aber C++ ist keine .NET-Sprache, wenn dann C++/CLI - das finde ich aber nicht wirklich ansprechend.

Dennoch ist und bleibt C# als Sprache nicht an .NET gebunden.
 
antred schrieb:
C++ ist keine schlechte Wahl, aber ich bin mir nicht so sicher, ob C++ die Spieleprogrammierung noch lange dominieren wird, oder ob es das überhaupt noch tut. Mit den immer schneller werdenden Rechnern der letzten Jahre zieht das Performance-Argument nicht mehr so stark wie es das noch vor 10 Jahren getan hat - zu mal Java und C# in dieser Hinsicht auch stark aufgeholt haben.

Es stimmt nicht ganz. Schnellere Rechner => komplexere Programme => Somit werden die Rechnter mehr zutun haben => Es ist letztendlich das gleich, wenn man von damals das Super Programm hat und mit dem damaligen Rechner das ganze "abspielt".
Die Argumentation, dass man mit schnelleren Rechnern auf die performante Programmierung verzichten will und unsinnig. Es wird immer zur jeder Zeit gefodert auf die Performance zu achten.

1668mib schrieb:
Anders? Wie anders?
Ja was ist anders? Mich würde ja auch interessieren. Einen Compiler zu schreiben braucht man keine richtige Programmiersprachen. Den Compiler dann später anzundenwen schon. Wenn jemand die Softwaretechniken besucht hat, kennt wie man (oder sollte mal einen Compiler selbst geschrieben haben) einen Compiler zusammensetzt. Worauf man alles achten muss. Einen Compiler kannst du in jeder Spachen schreiben.
Hierbei kommts wieder auf die Performance an. Hast du schlechten übersetzer geschrieben (dein Code ist nicht optimiert), so wirst du auch langsammer kompilieren. Bei C++ könnte es beim kompilieren auf die Wartezeit sich auswirken mehr nicht, da der Code in die Maschinensprache direkt übersetzt wird. Bei C# wird der Code während der Laufzeit in die Maschinensprache übersetzt, was zur immense Performanceeinbrüche während der Laufzeit führen könnte. Hierbei unterscheiden sich die beide Sprachen von Grund auf.
 
Zurück
Oben