<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Typ casten?]]></title><description><![CDATA[<pre><code>class a{
public:
  int x;
  bool y;
};

class b : public a{
public:
 int getX(){return x;}
};

class c : public a{
public:
 bool getY(){return y;}
};

int main(){
 a test();

 static_cast&lt;b&gt;(test).getX();
 reinterpret_cast&lt;c&gt;(test).getY();

 return 0;
}
</code></pre>
<p>Geht das iwie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322296/typ-casten</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 03:51:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322296.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Dec 2013 11:04:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 11:05:29 GMT]]></title><description><![CDATA[<pre><code>class a{
public:
  int x;
  bool y;
};

class b : public a{
public:
 int getX(){return x;}
};

class c : public a{
public:
 bool getY(){return y;}
};

int main(){
 a test();

 static_cast&lt;b&gt;(test).getX();
 reinterpret_cast&lt;c&gt;(test).getY();

 return 0;
}
</code></pre>
<p>Geht das iwie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371774</guid><dc:creator><![CDATA[junta]]></dc:creator><pubDate>Sat, 14 Dec 2013 11:05:29 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 11:07:05 GMT]]></title><description><![CDATA[<p>Dynamic cast</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371775</guid><dc:creator><![CDATA[fufhd]]></dc:creator><pubDate>Sat, 14 Dec 2013 11:07:05 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 11:11:04 GMT]]></title><description><![CDATA[<p>fufhd schrieb:</p>
<blockquote>
<p>Dynamic cast</p>
</blockquote>
<pre><code>./ast/ast_value.h:225:21: error: 'ipv_c' is not polymorphic
                return ipv_int_c((dynamic_cast&lt;ipv_int_c*&gt;(&amp;left))-&gt;toInt() + ((ipvt_int_c)right).toInt());
</code></pre>
<p>Ich werd mit C++ einfach nicht warm <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371776</guid><dc:creator><![CDATA[junta]]></dc:creator><pubDate>Sat, 14 Dec 2013 11:11:04 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 11:51:38 GMT]]></title><description><![CDATA[<p>Du kannst aus einem a selbstverständlich kein b oder c machen. Mal davon abgesehen sollte dein test eine Funktionsdeklaration sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371781</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 14 Dec 2013 11:51:38 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 11:58:55 GMT]]></title><description><![CDATA[<p>junta schrieb:</p>
<blockquote>
<p>Ich werd mit C++ einfach nicht warm <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Das liegt nicht an C++ sondern daran, dass du Vererbung/Polymorphie nicht verstanden hast.</p>
<p>Angenommen die Klasse a steht für Tier und die Klasse b steht für Katze. Du versuchst nun aus einem Tier eine Katze zu machen. Aber nicht jedes Tier ist eine Katze <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Schau dir noch einmal genau an was Vererbung macht. Stickwort &quot;is-a relationship&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371782</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 14 Dec 2013 11:58:55 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 13:13:51 GMT]]></title><description><![CDATA[<pre><code>a test();
</code></pre>
<p>ist eine Funktionsdeklaration, richtig wäre</p>
<pre><code>a test;
</code></pre>
<p>Aber wie gesagt kannst du ein <code>a</code> -Objekt (das tatsächlich als <code>a</code> konstruiert wurde), nicht zu einem <code>b</code> oder <code>c</code> konvertieren. Davon abgesehen führt man Downcasts auf Zeiger oder Referenzen durch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371796</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 14 Dec 2013 13:13:51 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 19:32:10 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<pre><code>a test();
</code></pre>
<p>ist eine Funktionsdeklaration</p>
</blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<pre><code>a test();
</code></pre>
<p>ist eine Funktionsdeklaration</p>
</blockquote>
<p>Und ich dachte da wird dann direkt der Konstruktor aufgerufen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>icarus2 schrieb:</p>
<blockquote>
<p>Das liegt nicht an C++ sondern daran, dass du Vererbung/Polymorphie nicht verstanden hast.</p>
</blockquote>
<p>Doch, schon. In anderen Sprachen funktioniert das ja auch. Sogar in C...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371843</guid><dc:creator><![CDATA[junta]]></dc:creator><pubDate>Sat, 14 Dec 2013 19:32:10 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 19:39:31 GMT]]></title><description><![CDATA[<p>junta schrieb:</p>
<blockquote>
<p>icarus2 schrieb:</p>
<blockquote>
<p>Das liegt nicht an C++ sondern daran, dass du Vererbung/Polymorphie nicht verstanden hast.</p>
</blockquote>
<p>Doch, schon. In anderen Sprachen funktioniert das ja auch. Sogar in C...</p>
</blockquote>
<p>Nein, tut es nicht. Erst recht nicht in C!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371845</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 14 Dec 2013 19:39:31 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 19:48:38 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>junta schrieb:</p>
<blockquote>
<p>icarus2 schrieb:</p>
<blockquote>
<p>Das liegt nicht an C++ sondern daran, dass du Vererbung/Polymorphie nicht verstanden hast.</p>
</blockquote>
<p>Doch, schon. In anderen Sprachen funktioniert das ja auch. Sogar in C...</p>
</blockquote>
<p>Nein, tut es nicht. Erst recht nicht in C!</p>
</blockquote>
<p>Wie auch immer. Wenn es mal läuft und mich C++ dann noch immer abfuckt, portiere ich es zu C!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371850</guid><dc:creator><![CDATA[junta]]></dc:creator><pubDate>Sat, 14 Dec 2013 19:48:38 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 20:11:35 GMT]]></title><description><![CDATA[<p>junta schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>junta schrieb:</p>
<blockquote>
<p>icarus2 schrieb:</p>
<blockquote>
<p>Das liegt nicht an C++ sondern daran, dass du Vererbung/Polymorphie nicht verstanden hast.</p>
</blockquote>
<p>Doch, schon. In anderen Sprachen funktioniert das ja auch. Sogar in C...</p>
</blockquote>
<p>Nein, tut es nicht. Erst recht nicht in C!</p>
</blockquote>
<p>Wie auch immer. Wenn es mal läuft und mich C++ dann noch immer abfuckt, portiere ich es zu C!</p>
</blockquote>
<p>Wo C ja auch soviel einfacher und anwenderfreundlicher als C++ ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371858</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 14 Dec 2013 20:11:35 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 20:18:11 GMT]]></title><description><![CDATA[<p>junta schrieb:</p>
<blockquote>
<p>Doch, schon. In anderen Sprachen funktioniert das ja auch. Sogar in C...</p>
</blockquote>
<p>Das &quot;funktioniert&quot; in keiner Sprache, weil es einfach keinen Sinn macht.<br />
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?</p>
<p>Du kannst einen Zeiger oder eine Referenz auf a nach b mithilfe von dynamic_cast nach b casten, wenn - und nur wenn - es sich in Wirklichkeit um eine Instanz von b (oder einer abgeleiteten Klasse von b) handelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371859</guid><dc:creator><![CDATA[ifsw]]></dc:creator><pubDate>Sat, 14 Dec 2013 20:18:11 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 20:34:21 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>junta schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>junta schrieb:</p>
<blockquote>
<p>icarus2 schrieb:</p>
<blockquote>
<p>Das liegt nicht an C++ sondern daran, dass du Vererbung/Polymorphie nicht verstanden hast.</p>
</blockquote>
<p>Doch, schon. In anderen Sprachen funktioniert das ja auch. Sogar in C...</p>
</blockquote>
<p>Nein, tut es nicht. Erst recht nicht in C!</p>
</blockquote>
<p>Wie auch immer. Wenn es mal läuft und mich C++ dann noch immer abfuckt, portiere ich es zu C!</p>
</blockquote>
<p>Wo C ja auch soviel einfacher und anwenderfreundlicher als C++ ist...</p>
</blockquote>
<p>Wenn man nicht Jahre Zeit hat richtiges C++ zu lernen ist es besser sich C in wenigen Wochen komplett anzueignen und dann los zulegen. Tut mal alle nicht so als wenn man in C keine geile kleine Software schreiben kann. Nicht jeder arbeitet im Team an großen Projekten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371862</guid><dc:creator><![CDATA[EinfachC]]></dc:creator><pubDate>Sat, 14 Dec 2013 20:34:21 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 20:46:44 GMT]]></title><description><![CDATA[<p>junta schrieb:</p>
<blockquote>
<p>icarus2 schrieb:</p>
<blockquote>
<p>Das liegt nicht an C++ sondern daran, dass du Vererbung/Polymorphie nicht verstanden hast.</p>
</blockquote>
<p>Doch, schon. In anderen Sprachen funktioniert das ja auch. Sogar in C...</p>
</blockquote>
<p>Nein, es klappt nicht! Du kannst das in C++, Java, C#, Eiffel oder was auch immer versuchen. Es klappt nicht weil es konzeptuell falsch ist.</p>
<p>Aber zeig mal wie du das in C hinbekommst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371866</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 14 Dec 2013 20:46:44 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 20:56:48 GMT]]></title><description><![CDATA[<p>EinfachC schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>junta schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>junta schrieb:</p>
<blockquote>
<p>icarus2 schrieb:</p>
<blockquote>
<p>Das liegt nicht an C++ sondern daran, dass du Vererbung/Polymorphie nicht verstanden hast.</p>
</blockquote>
<p>Doch, schon. In anderen Sprachen funktioniert das ja auch. Sogar in C...</p>
</blockquote>
<p>Nein, tut es nicht. Erst recht nicht in C!</p>
</blockquote>
<p>Wie auch immer. Wenn es mal läuft und mich C++ dann noch immer abfuckt, portiere ich es zu C!</p>
</blockquote>
<p>Wo C ja auch soviel einfacher und anwenderfreundlicher als C++ ist...</p>
</blockquote>
<p>Wenn man nicht Jahre Zeit hat richtiges C++ zu lernen ist es besser sich C in wenigen Wochen komplett anzueignen und dann los zulegen. Tut mal alle nicht so als wenn man in C keine geile kleine Software schreiben kann. Nicht jeder arbeitet im Team an großen Projekten.</p>
</blockquote>
<p>Ja, das mag ja sein.<br />
Ich selber komme von C. Und dieses Char-Array-Pointer-String-Gefrickel ist echt nicht schön. C++ ist bei soetwas wesentlich anwenderfreundlicher.<br />
Aber ich wollte hier jetzt keine Diskussion lostreten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371871</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 14 Dec 2013 20:56:48 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 23:33:49 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Wo C ja auch soviel einfacher und anwenderfreundlicher als C++ ist...</p>
</blockquote>
<p>Ich dachte bis jetzt nicht, dass es irgendwie strittig sei, dass C bedeutend einfacher als C++ ist. C++ ist (absolut und relativ zu C gesehen) einfach saumäßig komplex. Die Frage, ob diese Komplexität nötig oder zumindest gerechtfertigt ist, lasse ich hier mal bewusst außen vor.</p>
<p>&quot;Anwenderfreundlich&quot; ist wohl Ansichtssache. Der Anwender ist hier schließlich ein Programmierer, der, wenn er was auf sich hält, exakt verstehen muss, was sein Code macht. Ist man erstmal so weit, dass man die C++-Sprachkonzepte und die Standardlibrary soweit verinnerlicht hat, mag C++ definitiv <em>bequemer</em> zu nutzen sein. Der zu erbringende Aufwand ist aber nicht zu unterschätzen. C hingegen kann ein guter Programmierer deutlich schneller soweit beherrschen, dass ich seinen Code auf meine kritischen Server lassen würde.</p>
<p>Ich habe kein gutes Gefühl dabei, wenn Programmierer Librarycode nutzen, den sie nicht auch selbst implementieren könnten, wenn es denn nötig wäre. Tatsächlich machen sollen sie das selbstverständlich nicht, aber sie sollten definitiv dazu in der Lage sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371889</guid><dc:creator><![CDATA[etext]]></dc:creator><pubDate>Sat, 14 Dec 2013 23:33:49 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sat, 14 Dec 2013 23:40:09 GMT]]></title><description><![CDATA[<p>etext schrieb:</p>
<blockquote>
<p>Ich dachte bis jetzt nicht, dass es irgendwie strittig sei, dass C bedeutend einfacher als C++ ist.</p>
</blockquote>
<p>Doch. C ist leichter zu lernen, aber ganz sicher nicht einfacher zu benutzen.<br />
Assembler ist noch viel leichter als C zu lernen, aber niemand käme auf die Idee, Assembler als einfacher als C darzustellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371892</guid><dc:creator><![CDATA[ifsw]]></dc:creator><pubDate>Sat, 14 Dec 2013 23:40:09 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sun, 15 Dec 2013 00:12:31 GMT]]></title><description><![CDATA[<p>Man sollte einfach und leicht auseinanderhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371900</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sun, 15 Dec 2013 00:12:31 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sun, 15 Dec 2013 01:09:22 GMT]]></title><description><![CDATA[<p>ifsw schrieb:</p>
<blockquote>
<p>Das &quot;funktioniert&quot; in keiner Sprache, weil es einfach keinen Sinn macht.<br />
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?</p>
</blockquote>
<p>Der Punkt ist, dass ich weiß, dass die Klassen bis auf die Methoden identisch sind <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371905</guid><dc:creator><![CDATA[junta]]></dc:creator><pubDate>Sun, 15 Dec 2013 01:09:22 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sun, 15 Dec 2013 01:33:27 GMT]]></title><description><![CDATA[<p>Aus welchem Grund hast du dann überhaupt mehrere Klassen? Lass halt die Vererbung sein und pack die Methoden in die Basisklasse (oder schreib freie Funktionen). Es scheint ja nicht so zu sein, dass du hier irgendwas voneinander trennen wolltest -- sonst würde sich die Frage nach dem Cast gar nicht erst stellen.</p>
<p>Wenn du dir unbedingt in den Fuß schießen willst, durch den Compiler kriegst du das beispielsweise so:</p>
<pre><code class="language-cpp">a foo;
static_cast&lt;b*&gt;(static_cast&lt;void*&gt;(&amp;foo))-&gt;getX();
</code></pre>
<p>bzw. allgemein formuliert:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;type_traits&gt;

template&lt;typename T, typename U&gt;
T stupid_cast(U &amp;&amp;obj) {
  return *static_cast&lt;typename std::remove_reference&lt;T&gt;::type *&gt;(static_cast&lt;void*&gt;(const_cast&lt;typename std::remove_cv&lt;typename std::remove_reference&lt;U&gt;::type&gt;::type *&gt;(&amp;obj)));
}

struct A {
  int x;
};

struct B : A {
  int getX() { return x; }
};

int main() {
  A a { 10 };
  std::cout &lt;&lt; stupid_cast&lt;B&amp;&gt;( a) .getX() &lt;&lt; '\n';
  std::cout &lt;&lt; stupid_cast&lt;B*&gt;(&amp;a)-&gt;getX() &lt;&lt; '\n';
}
</code></pre>
<p>Aber komm nicht heulend her, sobald (nicht falls) dir das explodiert. Du wurdest ausgiebig gewarnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371908</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 15 Dec 2013 01:33:27 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sun, 15 Dec 2013 01:33:33 GMT]]></title><description><![CDATA[<p>ifsw schrieb:</p>
<blockquote>
<p>etext schrieb:</p>
<blockquote>
<p>Ich dachte bis jetzt nicht, dass es irgendwie strittig sei, dass C bedeutend einfacher als C++ ist.</p>
</blockquote>
<p>Doch. C ist leichter zu lernen, aber ganz sicher nicht einfacher zu benutzen.<br />
Assembler ist noch viel leichter als C zu lernen, aber niemand käme auf die Idee, Assembler als einfacher als C darzustellen.</p>
</blockquote>
<p>Ich habe als Bub damals mit Assembler angefangen und fand es dementsprechend total einfach, weil man hier bei jedem Befehl genau weiß was er macht. Bei C ist man schon auf den Compiler angewiesen, aber C kann noch sehr gut optimiert werden. C++ hingegen hat schon wieder viele Automatismen eingebaut und wenn es nicht extrem gut beherrscht wird mit Sicherheit kein besseres Programm als bei C damit raus kommen.</p>
<p>Wem Pointer und manuelle Speicherverwaltung schon zu schwer sind, der sollte um C++ einen weiten Bogen machen. Hier alles richtig zu machen erfordert sehr viele Jahre Erfahrung. Wie schon der Erfinder von C++ sagte: &quot;In C kann man sich in den Fuß schießen, macht man bei C++ was falsch ist das ganze Bein weg&quot;</p>
<p>Das Risiko mit C++ Murks zu programmieren ist daher jedenfalls am höchsten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371909</guid><dc:creator><![CDATA[ASMdannC]]></dc:creator><pubDate>Sun, 15 Dec 2013 01:33:33 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sun, 15 Dec 2013 02:08:16 GMT]]></title><description><![CDATA[<p>ASMdannC schrieb:</p>
<blockquote>
<p>Wie schon der Erfinder von C++ sagte: &quot;In C kann man sich in den Fuß schießen, macht man bei C++ was falsch ist das ganze Bein weg&quot;</p>
</blockquote>
<p>Das Zitat solltest du nochmal nachlesen. Oder, wenn es dir bekannt ist, aufhören, es sinnentstellend zu benutzen.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371913</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 15 Dec 2013 02:08:16 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sun, 15 Dec 2013 02:23:20 GMT]]></title><description><![CDATA[<p>junta schrieb:</p>
<blockquote>
<p>ifsw schrieb:</p>
<blockquote>
<p>Das &quot;funktioniert&quot; in keiner Sprache, weil es einfach keinen Sinn macht.<br />
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?</p>
</blockquote>
<p>Der Punkt ist, dass ich weiß, dass die Klassen bis auf die Methoden identisch sind <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>ist junta also der offizielle blurry des c++-forums?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371914</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Sun, 15 Dec 2013 02:23:20 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sun, 15 Dec 2013 07:03:44 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>junta schrieb:</p>
<blockquote>
<p>ifsw schrieb:</p>
<blockquote>
<p>Das &quot;funktioniert&quot; in keiner Sprache, weil es einfach keinen Sinn macht.<br />
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?</p>
</blockquote>
<p>Der Punkt ist, dass ich weiß, dass die Klassen bis auf die Methoden identisch sind <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>ist junta also der offizielle blurry des c++-forums?</p>
</blockquote>
<p>Konzentrier dich mal lieber mehr auf das buckeln. Wer ausschließlich nach unten tritt, kommt auch nicht rauf! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371921</guid><dc:creator><![CDATA[junta]]></dc:creator><pubDate>Sun, 15 Dec 2013 07:03:44 GMT</pubDate></item><item><title><![CDATA[Reply to Typ casten? on Sun, 15 Dec 2013 10:09:30 GMT]]></title><description><![CDATA[<p>EinfachC schrieb:</p>
<blockquote>
<p>Wenn man nicht Jahre Zeit hat richtiges C++ zu lernen ist es besser sich C in wenigen Wochen komplett anzueignen und dann los zulegen.</p>
</blockquote>
<p>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 &quot;Standardbibliothek&quot; (Java Class Library, .NET Framework).</p>
<p>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.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371932</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 15 Dec 2013 10:09:30 GMT</pubDate></item></channel></rss>