Typ casten?
-
ASMdannC schrieb:
Wie schon der Erfinder von C++ sagte: "In C kann man sich in den Fuß schießen, macht man bei C++ was falsch ist das ganze Bein weg"
Das Zitat solltest du nochmal nachlesen. Oder, wenn es dir bekannt ist, aufhören, es sinnentstellend zu benutzen.
Wie dem auch sei, der Trick, effektives C++ zu schreiben ist (wie bei jeder Hochsprache), die Automatismen für sich einzusetzen. Wer bei RAII bemängelt, dass man in der Funktion nicht sieht, was beim Verlassen selbiger passiert, hat schlicht nicht verstanden, dass der Sinn der Sache ist, sich nicht darum kümmern zu müssen.
Grundsätzlich: Programmierung besteht in erster Linie nicht daraus, einer Maschine zu erklären, was sie tun soll, sondern daraus, komplexe Probleme zu ordnen und zu formalisieren. Man mag auf die alte Tour kleinere Dinge noch zustandekriegen, aber beispielsweise eine Office-Suite in Assembler zu schreiben (und später zu warten!), ist reiner Wahnsinn. Die Registermaschine ist ab einer gewissen, nicht sonderlich großen Programmgröße nicht die Ebene, auf der man sich gedanklich bewegen will. Stattdessen konstruiert man sich ein Modell, mit dem man als Mensch umgehen kann und das gleichzeitig einer Maschine erklärbar ist, und dafür ist es sehr hilfreich, bestimmte, wiederkehrende Muster, die man häufig in solchen Modellen braucht, der Maschine automatisiert erklären zu lassen. Das fängt bei Funktionsaufrufen an, geht über Vererbung und virtuelle Funktionstabellen bis hin zu Exceptions, um ein paar Beispiele rauszugreifen.
Jetzt ist es möglich, Vererbung in C abzubilden -- schau dir nur die glib an. Man sieht dann auch sofort, wie das auf der Maschine funktioniert. Trotzdem will man das nicht benutzen müssen, wenn man es vermeiden kann. Es ist möglich, Exceptions in Assembler zu bauen, und man sieht dann auch ganz genau, wie die Mechanismen funktionieren (ob man sich darin zurechtfände, wenn man nicht schon wüsste, wie sie funktionieren, lassen wir mal außen vor). Trotzdem will man das nicht machen müssen, schon weil man die Tables für das Stack-Unwinding von Hand bauen müsste. In der Praxis führt das dazu, dass in Low-Level-Sprachen die Mechanismen, die erst mühselig von Hand gebaut werden müssten und ausgesprochen unbequem zu benutzen sind, nicht benutzt werden, auch wenn sie für die Modellierung des zu lösenden Problems sehr hilfreich wären.
Also ja: es gibt in C++ (wie in anderen Hochsprachen) Dinge, die man erstmal verstehen muss, bevor man sie effektiv einsetzen kann, und ja, Dinge zu verstehen erfordert Zeit und Mühe. Aber nahezu durch die Bank weg handelt es sich dabei um Dinge, die, wenn man sie verstanden hat, einem das Leben einfacher machen. Und um in der Programmierung einen Fuß auf den Boden zu kriegen, wird der TE sich auf kurz oder lang damit beschäftigen müssen, wie Vererbung funktioniert und wofür es gedacht ist. Allein von der Maschine her zu denken ist nur in Ausnahmefällen sinnvoll.
-
junta schrieb:
ifsw schrieb:
Das "funktioniert" in keiner Sprache, weil es einfach keinen Sinn macht.
Wenn du ein a nach b castest und b noch zusätzliche Member hätte, wo sollen dann deren Werte herkommen? Soll sich der Compiler welche ausdenken?Der Punkt ist, dass ich weiß, dass die Klassen bis auf die Methoden identisch sind

ist junta also der offizielle blurry des c++-forums?
-
asfdlol schrieb:
junta schrieb:
ifsw schrieb:
Das "funktioniert" in keiner Sprache, weil es einfach keinen Sinn macht.
Wenn du ein a nach b castest und b noch zusätzliche Member hätte, wo sollen dann deren Werte herkommen? Soll sich der Compiler welche ausdenken?Der Punkt ist, dass ich weiß, dass die Klassen bis auf die Methoden identisch sind

ist junta also der offizielle blurry des c++-forums?
Konzentrier dich mal lieber mehr auf das buckeln. Wer ausschließlich nach unten tritt, kommt auch nicht rauf!

-
EinfachC schrieb:
Wenn man nicht Jahre Zeit hat richtiges C++ zu lernen ist es besser sich C in wenigen Wochen komplett anzueignen und dann los zulegen.
Dann würde ich mir eher Java oder C# als C überlegen. Da erreicht man nämlich in kürzerer Zeit wesentlich mehr, und man muss sich nicht ständig um Low-Level-Dinge wie Speicherverwaltung kümmern. Ausserdem hat man viel mehr Features in der "Standardbibliothek" (Java Class Library, .NET Framework).
Wenn man sich für C++ entscheidet, nimmt man auch den entsprechend hohen Lernaufwand in Kauf. Dafür bietet einem die Sprache extrem viele Möglichkeiten.