<?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[Zuweisungoperator in vererbter templateklasse]]></title><description><![CDATA[<p>Hallo,</p>
<p>eine kurze Frage (Hilfe hat nichts gebracht). Ich habe eine Template klasse, sowie eine vererbte klasse dieser. Nun weiß ich ja dass Konstruktoren, Destruktoren und Zuweisungsoperator nicht mit vererbt werden.</p>
<p>Wenn ich nun den Zuweisungsoperator in der abgeleiteten template klasse implementiere, muss ich dann auch die private members der Basisklasse da zuweisen oder wird der Zuweisungsoperator von der Basisklasse automatisch auch aufgerufen? Oder muss ich ihn vielleicht explizit dann selber aufrufen?</p>
<p>Danke bereits<br />
Sam</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/254161/zuweisungoperator-in-vererbter-templateklasse</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 02:00:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/254161.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Nov 2009 13:42:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zuweisungoperator in vererbter templateklasse on Thu, 12 Nov 2009 13:42:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>eine kurze Frage (Hilfe hat nichts gebracht). Ich habe eine Template klasse, sowie eine vererbte klasse dieser. Nun weiß ich ja dass Konstruktoren, Destruktoren und Zuweisungsoperator nicht mit vererbt werden.</p>
<p>Wenn ich nun den Zuweisungsoperator in der abgeleiteten template klasse implementiere, muss ich dann auch die private members der Basisklasse da zuweisen oder wird der Zuweisungsoperator von der Basisklasse automatisch auch aufgerufen? Oder muss ich ihn vielleicht explizit dann selber aufrufen?</p>
<p>Danke bereits<br />
Sam</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806996</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Thu, 12 Nov 2009 13:42:19 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisungoperator in vererbter templateklasse on Thu, 12 Nov 2009 13:49:08 GMT]]></title><description><![CDATA[<p>Katachi schrieb:</p>
<blockquote>
<p>muss ich dann auch die private members der Basisklasse da zuweisen</p>
</blockquote>
<p>Nein, kannst du nicht. Auf private Member der Basisklasse hast du keinen Zugriff in der abgeleiteten Klasse.</p>
<blockquote>
<p>oder wird der Zuweisungsoperator von der Basisklasse automatisch auch aufgerufen?</p>
</blockquote>
<p>Nur wenn du den kompletten Zuweisungsoperator der neuen Klasse automatisch vom Compiler generieren lässt, d.h. wenn dir Elementweise Zuweisung reicht.</p>
<blockquote>
<p>Oder muss ich ihn vielleicht explizit dann selber aufrufen?</p>
</blockquote>
<p>Wenn du op= in der abgeleiteten Klasse selber implementierst ja.</p>
<pre><code class="language-cpp">class Base
{
  /* member... */
public:
  Base&amp; operator= (Base const&amp; rhs);
};

class Derived
{
  int member1;
  std::string member2;
public:
  Derived&amp; operator= (Derived const&amp; rhs)
  {
    Base::operator=(rhs);
    member1 = rhs.member1;
    member2 = rhs.member2;
    std::cout &lt;&lt; &quot;Abgesehn von diesem cout hätte auch der ganze op= compilergeneriert werden koennen!&quot; &lt;&lt; std::endl;
    return *this;
  }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1807002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807002</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 12 Nov 2009 13:49:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisungoperator in vererbter templateklasse on Thu, 12 Nov 2009 13:51:11 GMT]]></title><description><![CDATA[<p>Selber aufrufen. Oder aber die Finger von Vererbung (für diesen Fall) lassen. Wofür willst Du Vererbung nutzen? Ich kann micht nicht daran erinnern, in einer abgeleiteten Klasse jemals operator= einer Basisklasse aufgerufen zu haben. Das klingt verdächtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807004</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Thu, 12 Nov 2009 13:51:11 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisungoperator in vererbter templateklasse on Thu, 12 Nov 2009 14:42:52 GMT]]></title><description><![CDATA[<p>pumuckl: Vielen Dank! Sorry, ging um protected members nicht private. Natürlich kein Zugriff auf private. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Danke auch für die Erläuterungen!</p>
<p>Sebastian: die Basisklasse beinhaltet daten die eine Zuweisung benötigen. Jedoch gibt es auch neue Daten in der abgeleiteten Klasse die ebenfalls Zuweisungen benötigen. Deshalb der Zuweisungsoperatoraufruf beider Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807031</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Thu, 12 Nov 2009 14:42:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisungoperator in vererbter templateklasse on Thu, 12 Nov 2009 18:09:35 GMT]]></title><description><![CDATA[<p>Katachi schrieb:</p>
<blockquote>
<p>Sebastian: die Basisklasse beinhaltet daten die eine Zuweisung benötigen. Jedoch gibt es auch neue Daten in der abgeleiteten Klasse die ebenfalls Zuweisungen benötigen.</p>
</blockquote>
<p>Ja und?</p>
<p>Entweder weißt Du nicht, dass Kopierkonstruktor, Zuweisung und Destruktor automatisch generiert werden können (falls möglich) oder Du machst etwas falsch, wenn Du benutzerdefinierte Versionen brauchst (Stichworte &quot;Kapselung&quot;, &quot;RAII&quot;, etc).</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807160</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Thu, 12 Nov 2009 18:09:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisungoperator in vererbter templateklasse on Thu, 12 Nov 2009 19:22:29 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Ja und?</p>
<p>Entweder weißt Du nicht, dass Kopierkonstruktor, Zuweisung und Destruktor automatisch generiert werden können (falls möglich) oder Du machst etwas falsch, wenn Du benutzerdefinierte Versionen brauchst (Stichworte &quot;Kapselung&quot;, &quot;RAII&quot;, etc).</p>
</blockquote>
<p>Sorry, versteh ich jetzt nicht ganz was das jetzt damit zu tun hat. Wie würdest du es denn machen?</p>
<p>Hier mal eine vergleichbare Testklassen (natürlich nur mit den zum Verständnis nötigen Stuff):</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
Base&lt;T&gt;
{
  Base(const int cnt) : _vc(cnt) { values = bNew T[_vc]; }
  Base&lt;T&gt; &amp;operator=(const Base&lt;T&gt;&amp; rhs)
  {
   for(int i = 0; i &lt; _vc; ++i) values[i] = rhs(i);
   return *this;
  }

  protected:
    int _vc;
    T *values;
};

template&lt;typename T&gt;
Derived&lt;T&gt; : public Base&lt;T&gt;
{
 Derived(const int cnt, const float dim) : Base&lt;T&gt;(cnt), test(dim) {}

 protected:
   NClass test;
};
</code></pre>
<p>Beispiel:</p>
<pre><code class="language-cpp">Derived&lt;float&gt; a(20,400);
Derived&lt;float&gt; b(20,500);
[...]
a = b;
</code></pre>
<p>So, wie würdest du es denn jetzt machen (Derived::test und Base::values müssen aktualisiert werden)? Ich bin immer bereit etwas zu lernen. Oder meint ihr einfach dass der entsprechende zuweisungsoperator sowieso vom compiler erzeugt wird?</p>
<p>Danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807210</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Thu, 12 Nov 2009 19:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisungoperator in vererbter templateklasse on Thu, 12 Nov 2009 19:56:19 GMT]]></title><description><![CDATA[<p>Das mit den Unterstrichen am Anfang von Bezeichnern ist nicht gut, weil viele solcher Bezeichner &quot;reserviert&quot; sind.</p>
<p>Wofür ist denn die Vererbung da?</p>
<p>Katachi schrieb:</p>
<blockquote>
<p>Wie würdest du es denn machen?</p>
</blockquote>
<p>Kommt drauf an, was Du damit anstellen willst. Vielleicht so:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class dings {
  std::vector&lt;T&gt; bums;
  NClass test;
public:
  dings(int i1, int i2) : bums(i1), test(i2) {}
};
</code></pre>
<p>Katachi schrieb:</p>
<blockquote>
<p>Oder meint ihr einfach dass der entsprechende zuweisungsoperator sowieso vom compiler erzeugt wird?</p>
</blockquote>
<p>Ich bin der Meinung, dass die Resourcen-Verwaltung auf einen relativ kleinen Fetzen Code reduziert werden sollte (hier durch std::vector gelöst) und dass man sich vorher genau überlegen sollte, ob Komposition statt Vererbung nicht vielleicht angebrachter wäre.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807224</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Thu, 12 Nov 2009 19:56:19 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisungoperator in vererbter templateklasse on Fri, 13 Nov 2009 00:01:43 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Das mit den Unterstrichen am Anfang von Bezeichnern ist nicht gut, weil viele solcher Bezeichner &quot;reserviert&quot; sind.</p>
</blockquote>
<p>Guter Tipp.</p>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Wofür ist denn die Vererbung da?<br />
Kommt drauf an, was Du damit anstellen willst.</p>
</blockquote>
<p>Die Basisklasse ist eine dreidimensionale Datenstruktur. Diese speichert hauptsächlich einen Datenwert auf den man mit bestimmten Routinen zugreifen kann. Dies reicht für viele, einfache Operationen. Andere Operationen mit der Datenstruktur benötigen aber noch zusätzliche Routinen und zuätzliche Daten. Da kommt dann die erweiterte abgeleitete Klasse ins Spiel. Es greift auf die gleichen Daten zu, aber erlaubt höherrangige Routinen darauf zuzugreifen und Dinge zu berechnen. Die zusätzlichen Daten brauchen aber auch zusätzlichen Speicher. Deswegen ist es für mich nur ratsam mit Vererbung zu arbeiten. So kann ich die Objekte der Basisklasse für einfache Operationen verwenden (weniger Speicherverbrauch, schnellere Erzeugung der Objekte durch weniger Vorkalkulatinen im Konstruktor, und natürlich weniger Konstruktoraufrufe von den zusätzlichen Daten) und die abgeleitete Klasse für höherrangige Aufgaben.<br />
Würde ich das alles einbetten, dann würde ich für die meisten Aufgaben unnötigen Speicher alloziieren und berechnungen durchführen die Performancelastig sind.</p>
<p>Vererbung zeigt für mich hier den genau richtigen Nutzen. Oder was würdest du sagen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807323</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Fri, 13 Nov 2009 00:01:43 GMT</pubDate></item></channel></rss>