<?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[typecast bei vererbung]]></title><description><![CDATA[<pre><code class="language-cpp">class base
{
  public:
    base();
    base(base const&amp; src);
//...
} foo_base;

class derived : public base
{
  public:
    derived();
    derived(derived const&amp; src);
//...
} foo_derived;
</code></pre>
<p>ich möchte gerne wissen ob es zwischen den beiden folgenden anweisungen einen nennenswerten unterschied gibt?</p>
<pre><code class="language-cpp">foo_base = (base)foo_derived; //hier sollte ja nur eine reduzierung von derived auf base stattfinden, oder?
foo_base = base(foo_derived); //ruft er hier den copy-konstrukter auf oder 'reduziert' der die derived-klasse einfach nur auf die base-klasse
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/206481/typecast-bei-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 11:02:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/206481.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Feb 2008 16:33:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to typecast bei vererbung on Mon, 25 Feb 2008 16:33:44 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class base
{
  public:
    base();
    base(base const&amp; src);
//...
} foo_base;

class derived : public base
{
  public:
    derived();
    derived(derived const&amp; src);
//...
} foo_derived;
</code></pre>
<p>ich möchte gerne wissen ob es zwischen den beiden folgenden anweisungen einen nennenswerten unterschied gibt?</p>
<pre><code class="language-cpp">foo_base = (base)foo_derived; //hier sollte ja nur eine reduzierung von derived auf base stattfinden, oder?
foo_base = base(foo_derived); //ruft er hier den copy-konstrukter auf oder 'reduziert' der die derived-klasse einfach nur auf die base-klasse
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1462629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462629</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Mon, 25 Feb 2008 16:33:44 GMT</pubDate></item><item><title><![CDATA[Reply to typecast bei vererbung on Mon, 25 Feb 2008 16:37:34 GMT]]></title><description><![CDATA[<p>Beide Formen sind äquivalent, in beiden Fällen wird ein neues base-Objekt aus dem gegebenen derived-Objekt konstruiert (Copy-Ctor, Slicing). Du willst wahrscheinlich nach base&amp; casten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462631</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 25 Feb 2008 16:37:34 GMT</pubDate></item><item><title><![CDATA[Reply to typecast bei vererbung on Mon, 25 Feb 2008 16:45:39 GMT]]></title><description><![CDATA[<p>eine weitere frage ist noch, wenn ich in beiden klassen einen operator (z.B. *=) definiert habe und zwei objekte von type derived habe, wie kann ich sagen, dass er den operator aus der base-klasse anstatt dem aus der derived klasse nutzen soll? das zielt darauf ab, das der derived operator bei mir auf den base-operator aufsetzt. er macht also nur noch was zusätzliches ansonsten genau das gleiche wie der base-operator.</p>
<pre><code class="language-cpp">class base
{
  public:
    base();
    base(base const&amp; src);
    base operator *= (base const &amp;rhs);
//...
} foo_base;

class derived : public base
{
  public:
    derived();
    derived(derived const&amp; src);
    derived operator *= (derived const &amp;rhs)
    {
      //hier soll der operator *= aus der base-klasse verwendet werden
    };
//...
} foo_derived;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1462636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462636</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Mon, 25 Feb 2008 16:45:39 GMT</pubDate></item><item><title><![CDATA[Reply to typecast bei vererbung on Mon, 25 Feb 2008 16:46:38 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">derived operator *= (derived const &amp;rhs)
    {
         return base::operator*=(rhs); // würd ich sagen      
    };
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1462638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462638</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 25 Feb 2008 16:46:38 GMT</pubDate></item><item><title><![CDATA[Reply to typecast bei vererbung on Mon, 25 Feb 2008 17:19:38 GMT]]></title><description><![CDATA[<p>sorry, ich glaub der code war etwas falsch.</p>
<pre><code class="language-cpp">class derived : public base
{
  public:
    derived();
    derived(derived const&amp; src);
    derived &amp;operator *= (derived const &amp;rhs)
    {
      //hier soll der operator *= aus der base-klasse verwendet werden
      //sowas wie *this base::operator *= derived
      //aber da meckert er bei mit rum wenn ich sowas schreib
      //weiter anweisungen
      return *this;
    };
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1462669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462669</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Mon, 25 Feb 2008 17:19:38 GMT</pubDate></item><item><title><![CDATA[Reply to typecast bei vererbung on Mon, 25 Feb 2008 17:36:35 GMT]]></title><description><![CDATA[<p>ok, ich habs raus</p>
<pre><code class="language-cpp">(*this).base::operator *=(derived);
</code></pre>
<p>muss es heißen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462686</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Mon, 25 Feb 2008 17:36:35 GMT</pubDate></item><item><title><![CDATA[Reply to typecast bei vererbung on Tue, 26 Feb 2008 22:11:02 GMT]]></title><description><![CDATA[<p>wieso nicht einfach so?</p>
<pre><code class="language-cpp">foo&amp; operator =(foo const&amp; other)
{
    static_cast&lt;base&amp;&gt;(*this) = other;
}
</code></pre>
<p>solange der operator = nicht virtual ist (was er IMO nie sein sollte) sollte das dasselbe bewirken.</p>
<p>EDIT: ok, operator *= in den fall (und nicht operator =), ändert aber nix <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="😉"
    /> /EDIT</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463668</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 26 Feb 2008 22:11:02 GMT</pubDate></item></channel></rss>