C++, vc++, c#, .NET ?!?

Kruemel

Mitglied
Hi!

Was haltet ihr eigentlich von C++ verglichen mit Java? Ich würde gerne C++ lernen, die vielfalt ist allerdings erschreckend ^^

Sind Visual C++ oder diese .NET Framework Geschichten empfehlenswert?

Habe schon C gelernt, will jetzt bei C++ nichtwieder mit den Consolenfenster anfangen,
da wäre Visual C++ wohl der richtige Weg, oder?

Ist das gebräuchlich (professionell)?

Gruß, Kruemel
 

Marco13

Top Contributor
Ah, endlich mal wieder ein "Welche Sprache tut eigentlich die besteste sein?"-Thread :D

Visual Studio ist schon OK. Bei nicht-Konsolen-Anwendungen hat man entweder die Wahl zwischen der reinen Windows-API (Buch von Charles Petzold) oder speziellen Bibliotheken (Qt & Co....)
 
G

Gast2

Gast
generell schließe ich mich der Frage von tfa an ....


Was haltet ihr eigentlich von C++ verglichen mit Java?
nichts - das sind zwei völlig verschiedene Sprachen

Ich würde gerne C++ lernen, die vielfalt ist allerdings erschreckend ^^
welche Vielfalt - den Wildwuchs den MS mit C++/CLI geschaffen hat?

Sind Visual C++ oder diese .NET Framework Geschichten empfehlenswert?
was willst Du C++ oder C++/CLI ... in letzterem Fall - lass die Finger davon ... da wirst Du nicht glücklich mit VisualStudio ... wenn Du das .NET Framework verwenden willst, nimm C# und in Ausnahmefällen (also wenn Du die Windows-API benötigst) schreibt eine DLL auf Basis von C++/CLI (Stichwort Wrapper)

Habe schon C gelernt, will jetzt bei C++ nichtwieder mit den Consolenfenster anfangen,
da wäre Visual C++ wohl der richtige Weg, oder?
nein ... C++ mit irgend einem Framework (Qt oder so) ... aber nicht C++/CLI

Ist das gebräuchlich (professionell)?
???:L
 

Kruemel

Mitglied
Danke für eure Antworten erstmal.

Gegen Visual C++ und C# bzw. .NET Sachen spricht für mich dieses Drag&Drop editing. Das mag ich nicht. Auch z.B. JavaBeans ist nix für mich...

Ich denke ich werd ganz einfach mit hundsgewöhnlichem C++ mit Code::Blocks anfangen, WinAPI lernen, später sollte der Umstieg auf Visual C++ (das einem bestimmt die Arbeit erleichtert wenn man schon mal'n Plan hat) leicht fallen.

Das mit professioneller Anwendung interessiert mich deßhalb weil ich später in diese Richtung arbeiten werden. C++ habe ich aber erst im Hauptstudium, deßhalb weiß ich nicht so recht wo ich anfangen soll...

Was mich in der Hinsicht allerdings frappiert ist, dass fast jedes aktuelle Computerspiel die Visual C++ Runtime Engine installiert, deßhalb dachte ich dass das wohl doch sehr verbreitet ist.

Wird dieses Paket gezwungenermaßen benötigt um Visual C++ Programme auszuführen? Das ist nämlich Käse, da ist C++ ohne Visual wohl besser.

Gruß, Kruemel

Edit: Kennt jemand ein super C++ Buch?
 

tfa

Top Contributor
Du bist dir aber schon bewusst, dass C++ alles andere als eine moderne und "schöne" Programmiersprache ist. Wenn man die Wahl hat, sollte man auf jeden Fall was anderes nehmen.
 

Marco13

Top Contributor
Gegen Visual C++ und C# bzw. .NET Sachen spricht für mich dieses Drag&Drop editing. Das mag ich nicht.

Ich bin nicht ganz sicher: Es gab wohl mal eine Zeit, wo "Visual C++" sich nur auf besagtes Clickibunti-Ding bezog. Aber mit Visual Studio kann (und sollte) man genauso fies-low-levelig Code hintippen wie mit jeder anderen IDE auch...
 

Landei

Top Contributor
C# und F# sind die "modernsten" Sprachen für .NET

Es gibt übrigens auch Sprachen, die sich sowohl auf .NET als auch auf der JVM ausführen lassen (natürlich bestehen Plattform-Abhängigkeiten je nach verwendeten Bibliotheken). Soweit ich weiß geht das mit Fantom und Scala.
 

Kruemel

Mitglied
Folgender Absatz aus Coding for Fun mit C++ hält mich irgendwie von C# ab ^^

Liebe Leserin, lieber Leser,
welche der folgenden Aussagen trifft am ehesten auf Sie zu?
Ich kann C++.
a) Nein, aber klingt interessant. (0 Punkte)
b) Ja, ein bisschen. (5 Punkte)
c) Klar! (10 Punkte)
d) Nein, aber ich kann C#. (–100 Punkte) <--- :autsch:

Hat C# Nachteile die diese -100 Punkte rechtfertigen?

Gruß, Kruemel
 
M

maki

Gast
Du musst lernen, das solche Aussagen nicht auf objektiven Kriterien basieren, sondern schlicht Propaganda sind, oder um es deutlicher zu sagen: Bullshit :)

Ein BS Beispiel von mir:
Diese Frage dient dazu, die Masochisten von den gesunden Leuten zu trennen, oder wer sollte 2011 sonst Spass daran haben in C++ zu programmieren?

Wenn du hier (in einem Javaforum) fragst werden die viele sagen das C++ veraltet und überholt ist, und sowieso nur noch eine irrelevante Randerscheinung in der heutigen Softwareentwickluing darstellt.
Dann werden viele Leute sagen, dass C# nur eine schlechte Java Kopie von M$ ist, und wie immer kopiert M$ sehr schlecht.
usw.
 
G

Gast2

Gast
Hat C# Nachteile die diese -100 Punkte rechtfertigen?

[DUKE]STOPP !![/DUKE]

ab hier hast Du 2 Möglichkeiten

  1. Du machst weiter wie bisher (komische Foren lesen und nicht nachdenken)
  2. Du fängst an Programmiersprachen als Werkzeuge zum Lösen eines Problems zu betrachten

ich rate zu letzterem ... unter Linux bevorzuge ich Java - wobei ich auch schon C verwendet habe ... Windows hat bei mir einen .NET Vorteil ... Webseiten mache ich mit PHP ... auf einem Mikrocontroller verwende ich (unter diversen Umständen) Assembler

es geht nicht darum welche Sprache gerade ab beliebtesten ist - sondern welche Sprache sich zum Lösen des Problems am besten eignet

hand, mogel
 

schlingel

Gesperrter Benutzer
Die Frage ist auch ob du dich auf eine Plattform festlegen möchtest.

Wenn du z.B. C++ lernst und als UI-Framework GTK wählst, dann hast du gute Chancen dass die Anwendung auf Linux, Mac und Windows läuft. Wenn du QT nimmst, was ja als Framework nicht nur UI abdeckt, stehen die Chancen sogar schon sehr gut.

Wenn du dir denkst Windows ist vollkommen OK und du möchtest bei der Plattform bleiben spricht auch nichts gegen C++ auf Windows. Der Unsinn dass du dann sofort C++/CLI programmieren musst stimmt natürlich nicht. Die Wahl steht dir offen, du kannst weiterhin vollkommen native Win-API Anwendungen schreiben oder auch nicht.
C++/CLI hat jedoch den Vorteil, dass sich damit ganz leicht Brücken zwischen der .Net-Welt und der nativen Windows-Welt basteln lassen. Was man nicht vergessen darf sind dann die zusätzlichen MS-Frameworks, MFC, ATL usw. usf. Mehraufwand für diese Plattform.

Das Drag&Drop-Editing hat mich auch immer abgeschreckt. Da in sehr vielen Tutorials alles mit den build-in Tools in Visual Studio erledigt wird. Darauf bist du aber nicht angewiesen. Du kannst alles auch ganz normal coden. Obwohl mich diese Klick-Editoren nie interessiert haben da ich als Anfänger nicht verstanden habe was da passiert, war ich dann doch C#-Entwickler für 2,5 Jahre.

F# ist denke ich zur Zeit das interessanteste auf der .Net-Plattform auch wenn C# sehr viele Features daraus inkludiert. Doch funktionale Sprachen üben auf mich eine eigene Faszination aus.
 

Marco13

Top Contributor
Das hier teilweise auf die Plattform angespielt wurde: Man kann sich praktisch beliebig lange mit C++ beschäftigen, und lernt immer neues (von den Basics über STL bis Boost) ohne dass die Frage der Plattform eine Rolle spielt. Bei GUIs ist das noch am "kritischsten", aber mit Dingen wie Qt kann man da auch einigermaßen flexibel bleiben.
 
S

Sym

Gast
[...]es geht nicht darum welche Sprache gerade ab beliebtesten ist - sondern welche Sprache sich zum Lösen des Problems am besten eignet[...]
Nicht ganz. Es geht auch darum, welche Sprachen man beherrscht. Nur weil eine Sprache optimal geeignet wäre, heißt dies nicht, dass man diese unbedingt verwenden sollte. :)

Ich würde für das Lernen einer Sprache auch etwas moderneres verwenden. Java ist sehr verbreitet und kann sehr viel. Damit wird man bestimmt glücklich. C# ist in manchen Bereichen immer ein wenig schneller innovativ. :) Beides (in meinen Augen) schöne Sprachen.
 
G

Gast2

Gast
Es geht auch darum, welche Sprachen man beherrscht.
das die Fähigkeiten zu einer Sprache durchaus hier eine Rolle spielen sollte wohl klar sein ... wenn ich ein Programm mit reiner GUI & nur Windows und sonst nichts schreiben muss, werde ich C# den Vorzug geben - da ich mich in GUI Dingen unter C# besser auskenne ... obwohl hier beide Sprache eindeutig gleichberechtig sind ... würde ich mich mit Java & GUI besser auskennen würde Java den Zuschlag erhalten - zumal ich dann dem Kunden das Programm nochmal für Linux verkaufen kann :D
 

darekkay

Bekanntes Mitglied
Nicht ganz. Es geht auch darum, welche Sprachen man beherrscht. Nur weil eine Sprache optimal geeignet wäre, heißt dies nicht, dass man diese unbedingt verwenden sollte. :)

Auf der anderen Seite sollte man auch mit dem Fortschritt gehen - nur weil ich eine Sprache sehr gut beherrsche, heißt es nicht, dass ich sie bis in alle Ewigkeiten benutzen soll oder kann ;)
Als Programmierer sollte ja die Aneignung einer neuen Sprache eher weniger Probleme bereiten.
 

Spitfire777

Bekanntes Mitglied
Naja, also Oracle ist nun auch nicht wirklich die Heilsarmee im Vergleich zu "M$".

Java und C# kann man nur im Detail vergleichen, wobei MS bei C# einige praktische Dinge "dazuerfunden" hat.
 
S

Sym

Gast
Swing gehört nun einmal zu Java dazu und ist die Standard-Java-UI. Früher war die Standard-Java-UI AWT. Das es andere und auch ggf. bessere UIs für Java gibt, möchte ich nicht bestreiten.

In den Projekten die ich kennenlernen durfte, war es bisher häufig so, dass Java UI mit Swing gleichgesetzt wurde. Und mir ging es bei meiner Aussage auch nur um meine persönliche Abneigung, Swing zu benutzen.
 

JimPanse

Bekanntes Mitglied
Ich mache jetzt einfach mal mit!

Also es kommt immer auf den Anwendugsfall drauf an welche Programmiersprache oder Plattform du verwendest!

Programmieren Lernen: Java oder C#
Kleine schmutzige Web-Anwendungen: PHP :D
Große + verteilte Systeme: .NET oder Java EE


Was mich in der Hinsicht allerdings frappiert ist, dass fast jedes aktuelle Computerspiel die Visual C++ Runtime Engine installiert, deßhalb dachte ich dass das wohl doch sehr verbreitet ist.

Jap bei Computerspielen wirst du wohl C/C++ brauchen dann aber auch OpenGL/Glut/SDL /Boost etc...

C++: OGRE – Open Source 3D Graphics Engine oder Horde3D - Next-Generation Graphics Engine
Orge3D & Horde hatte ich im Studium und wir haben einige ganz nette Sachen damit erstellt.

Das Java Gegenstück:
Java: jMonkeyEngine 3.0 | Java OpenGL Game Engine

Wobei Java auch native Bibliotheken hierfür braucht um direkt mit den Resourcen des Betriebssystem zu arbeiten (wie auch SWT, Java3D usw).
 

Kruemel

Mitglied
Danke für die vielen Infos und Anregungen.

Hab mir aus der Bibliothek ein C++ und ein C# Buch geholt, heute bin ich jetzt den ganzen Tag an C# gesessen. Macht richtig Spaß! Auch das Drag und Drop und so hat durchaus was für sich, obwohl es sich ein bisschen wie Kinderspielzeug anfühlt.

Diese Click-Editoren hab ich nur mit Visual Basic 5 oder 6 (also echt lange her) und Delphi kennengelernt, da hat sich ja zu C# und .NET einiges getan, gerade die Layoutmanager sind auch echt gut zu handlen finde ich.

Ich werde wohl bei C# bleiben, ist eine zukunftsorientierte Sprache. Was mich stört ist dass das .NET Framework installiert sein muss aber nu gut irgendwo muss man Abstriche machen ^^

Vielen Dank euch allen, habt mich quasi "bekehrt" ^^

Gruß, Kruemel

Edit: Zu 3D Games, XNA für C# sieht auch stark aus:
XNA Racing Game
 
Zuletzt bearbeitet:

JimPanse

Bekanntes Mitglied
G

Gast2

Gast
Bezüglich der Drag'n'Drop GUI Editoren in Visual Studio. Was verwendest du? Die Windows Forms oder WPF? Ich würde dir sehr ans Herz legen dir mal WPF anzusehen. Da hast du die gesammte GUI als XML beschrieben und kannst sehr gut nachvollziehen was da passiert und auch on the fly händisch ändern.

Von den ganzen neuen und sehr coolen Databinding Features mal ganz abgesehn. Man spart sich irre viel Code und rumgemurkse dadruch.
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
das was von C benötigt wird, steckt aber schon im Betriebssystem
???:L ... das was von Java benötigt wird, steckt aber schon im Betriebssystem ... ansonsten -> statisches Linken

bei C wird die Laufzeitbibliothek (dummerweise) statisch gelinkt - dennoch existiert die Laufzeitbibliothek ... C ist ebenfalls wie Java Plattform unabhängig - solange Du Dich an den Standard hälst ... die Laufzeitbibliothek ist dafür zuständig das ein printf auf Linux etwas auf der Console ausgibt und auf Windows ... in der Laufzeitumgebung erfolgt dann der entsprechende BS-Aufruf

allerdings hat statisches Linken den Nachteil das bei einem Fix der Laufzeitbibliothek alle Programm (zumindest) neu gelinkt werden müssen ... das ist schlecht ... besser ist es die Laufzeitbibliothek dynamisch zur Laufzeit nachzuladen (Java/C#/Boost/Gtk/...) ... dadurch wird zwar immer alles mitgeliefert ... allerdings sind auch alle Programme die die Laufzeitbibliothek nutzen sofort gefixt
 

Kruemel

Mitglied
Nochmals dazu:

Habe festgestellt das Windows 7 schon automatisch das .NET Framework bereitstellt, es ist schon enthalten, eine extra installation ist also nicht nötig was .NET Programme natürlich anwenderfreundlicher macht.

C# ist schon :toll:

Gruß, Kruemel
 
G

Gast2

Gast
Habe festgestellt das Windows 7 schon automatisch das .NET Framework bereitstellt, es ist schon enthalten, eine extra installation ist also nicht nötig was .NET Programme natürlich anwenderfreundlicher macht.

Nur bedingt richtig. Windows 7 bringt nur .NET 3.5SP1 mit. Wenn du 4er Features und APIs verwenden willst musst du es auch nachinstallieren lassen. Für ältere Windows Versionen sieht es da noch schlechter aus. Ich glaube bei Vista war .NET 1.1 (maximal 2.0) mit bei.
 

schlingel

Gesperrter Benutzer
Hallo, man darf aber nicht vergessen, dass die Runtimes z.B. für den MSI-Service gebraucht werden. Das heißt die Chancen stehen sehr gut, dass die Version 3.5 SP1 installiert ist.

Zudem, rate ich dir strikt davon ab Version 1.1 zu verwenden. Während Version 2.0 bis 4.0 auf der selben Basis aufbauen, fühlt sich .net v1.1 wie Java 1.4.2 an. Das kann man total vergessen wobei auch noch zu erwähnen ist, dass in v1.1 noch keine Delegates und Generics vorhanden sind und damit viel von C# fehlt.
 

Spitfire777

Bekanntes Mitglied
Also mir gefällt C# eigentlich richtig gut, vor allem das Umschreiben von Operatoren zur Anwendung auf eigene Typen find ich ziemlich sexy :D
Ich bin davon überzeugt, dass MS mit .NET einiges an verlorenen Posten wieder gut machen kann, aber mal sehn, was die Zukunft bringt^^
 
M

maki

Gast
Also mir gefällt C# eigentlich richtig gut, vor allem das Umschreiben von Operatoren zur Anwendung auf eigene Typen find ich ziemlich sexy
Du meinst operator overloading?
Mann bin ich froh dass es sowas in Java nicht gibt :)
 

Marco13

Top Contributor
Also mir gefällt C# eigentlich richtig gut, vor allem das Umschreiben von Operatoren zur Anwendung auf eigene Typen find ich ziemlich sexy :D

Ja, vermutlich Operator Overloading. Das gibt es auch in C++ und vielen anderen Sprachen. Und das kann wirklich "sexy" sein. Wer schonmal versucht hat, ein paar vermeintlich triviale Berechnungen von 'float' auf 'BigDecimal' umzustellen, weiß das. Aber wer glaubt, dass ein "Ring" immer an einen Finger gehört, ein Finger Teil von einem "Körper" sein muss, und mehrere Körper eine "Gruppe" bilden, sollte von Operatorenüberladung IMHO tunlichst die Finger lassen...
 
M

maki

Gast
Ja, vermutlich Operator Overloading. Das gibt es auch in C++ und vielen anderen Sprachen. Und das kann wirklich "sexy" sein.
Wie sexy ist Operator Overloading wenn die Priorität der Operatoren nicht festgelegt ist?
Klar wäre es toll gewesen wenn eingebaute Number Typen wie BigDecimal Op Ov. hätten, bei String ging es ja auch, zumindest beim +.
Während es für arithmethische Operationen unzweifelhaft Vorteile hätte, wäre es für alle anderen Fälle wohl ein Rückschritt, bei Arithmetik verstehe ich den Vorteil von + zu add(..), bei person1 + person2 muss man sich schon sehr fragen was das soll.
Aber jedem Entwickler sollte man nicht die Möglichkeit geben Operatoren zu überladen, denn die meisten sind sich nciht über die Konsequenzen im klaren.
 
Zuletzt bearbeitet von einem Moderator:

Landei

Top Contributor
Ich finde Operatorüberladung - wenn sie richtig implementiert ist - gut. Hier z.B. Parser Combinators in Scala:

Code:
 lexical.delimiters ++= List("(", ")", "+", "-", "*", "/")

 def factor: Parser[Int] = "(" ~> expr <~ ")" | numericLit ^^ (_.toInt)

 def term : Parser[Int] = (
   factor ~ "*" ~ term ^^ { case x ~ "*" ~ y => x * y } |
   factor ~ "/" ~ term ^^ { case x ~ "/" ~ y => x / y } | factor )

def expr : Parser[Int] = (
  term ~ "+" ~ expr ^^ { case x ~ "+" ~ y => x + y } |
  term ~ "-" ~ expr ^^ { case x ~ "-" ~ y => x - y } | term )

Man stelle sich das in Java-Syntax vor...

Auch gut finde ich, wenn man Bezeichner wie Operatoren verwenden kann, z.B. wie in Haskell (wobei man Backticks ` verwenden muss):
Code:
sortBy (compare `on` fst) [(1,2),(5,2),(3,6)]

--anstatt der "normalen" Schreibweise
sortBy (on compare fst) [(1,2),(5,2),(3,6)]

Das Argument vom "Mißbrauch" mag ich gar nicht mehr hören, es ist so absurd wie eine Pistole bauen zu wollen, mit der man sich nicht selbst in den Fuß schießen kann. Das heißt nicht, dass man auf alle Sicherheitsmaßnahmen verzichten sollte, aber diese dürfen eben nicht so weit gehen, dass sie die Gebrauchsfähigkeit einschränken. Eine Sprache, in der man keinerlei "Unsinn" anstellen könnte, wäre so beschränkt, dass sie sich nicht zu lernen lohnt.
 
G

Gast2

Gast
Das Argument vom "Mißbrauch" mag ich gar nicht mehr hören, es ist so absurd wie eine Pistole bauen zu wollen, mit der man sich nicht selbst in den Fuß schießen kann. Das heißt nicht, dass man auf alle Sicherheitsmaßnahmen verzichten sollte, aber diese dürfen eben nicht so weit gehen, dass sie die Gebrauchsfähigkeit einschränken. Eine Sprache, in der man keinerlei "Unsinn" anstellen könnte, wäre so beschränkt, dass sie sich nicht zu lernen lohnt.

dito ... wenn man es übertreibt (aus Plus ein Minus zu machen) ist es absoluter Mist ... ansonsten

Java:
MyStack stack = new MyStack();
stack = 5;
stack = 4;
System.out.println(stack);
System.out.println(stack);
// Ausgabe -> erst 4 dann 5

ist schon etwas Grenzwertig ... wobei es aber genau das darstellt was ein Stack macht
 

Spitfire777

Bekanntes Mitglied
Ich denke, es liegt beim Programmierer, wo er Operator Overloading einsetzt. Natürlich wird es in unpassenden Kontexten zu sehr verwirrendem Code und zu mehr Fehlerquellen führen. Schließlich muss ich i.d.R. z.B. beim Vergleichsoperator auf komplementäre Operatoren achten, z.B. das Overloading von "==" impliziert auch das Overloading von "!=", usw.

Jedoch kann man mit Operator Overloading Operationen als kurze und klare Aussagen darstellen und hat mir in größeren Klassen die Lesbarkeit bisher, passend eingesetzt, deutlich vereinfacht, wobei ich z.B. arithmetische Opertoren bisher eigentlich eh immer nur mit Zahlentypen verwendet habe.

Und wenn jemand sowas macht:
Code:
bundesland = person1 + schlechtesWetter;
...dann hat der jenige wirklich ne Pistole verdient, mit der man sich ins Bein schiessen kann.

Ob OO im Einzelfall nützt, oder nicht... Nur auf solche Weise können neue Innovationen entstehen, wenn man neue Denkrichtungen verfolgt. Und auch wenns halt nunmal vom "bösen Redmon(d)ster" ist.
 
Zuletzt bearbeitet:

Landei

Top Contributor
dito ... wenn man es übertreibt (aus Plus ein Minus zu machen) ist es absoluter Mist ... ansonsten

Java:
MyStack stack = new MyStack();
stack = 5;
stack = 4;
System.out.println(stack);
System.out.println(stack);
// Ausgabe -> erst 4 dann 5

ist schon etwas Grenzwertig ... wobei es aber genau das darstellt was ein Stack macht

Ich würde sowas bevorzugen:
Java:
stack += 5;
stack += 4;

oder sogar:
Java:
5 -> stack;
4 -> stack;
 

Neue Themen


Oben