<?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[Variable mit erbender Klasse überschreiben]]></title><description><![CDATA[<p>Ich habe in meiner Klasse namens Logik folgende Variable deklariert:</p>
<pre><code>SortAlgo* m_sort;
</code></pre>
<p>SortAlgo ist die Oberklasse, StraightInsertion(s. u.) erbt von dieser.</p>
<p>Wenn im Laufe des Programms bekannt ist, welcher Sortier-Algorithmus benutzt<br />
wird, soll die Variable überschrieben werden:</p>
<pre><code>void Logic::setAlgo(SortAlgo* algo)
	delete m_sort;
	m_sort = algo;
	m_sort-&gt;m_log = this;
}
</code></pre>
<p>Hier ein Ausschnitt aus meiner main.cpp:</p>
<pre><code>Logic l;
StraightInsertion* algo;
l.setAlgo(algo);
</code></pre>
<p>Das Problem ist hierbei, daß m_sort hinterher immer noch &quot;denkt&quot;, es sei ein<br />
SortAlgo und kein StraightInsertion. Was mache ich falsch bzw. wie geht es richtig?</p>
<p>Gruß, Tigger</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/131753/variable-mit-erbender-klasse-überschreiben</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 05:52:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/131753.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Jan 2006 16:07:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variable mit erbender Klasse überschreiben on Thu, 05 Jan 2006 16:07:37 GMT]]></title><description><![CDATA[<p>Ich habe in meiner Klasse namens Logik folgende Variable deklariert:</p>
<pre><code>SortAlgo* m_sort;
</code></pre>
<p>SortAlgo ist die Oberklasse, StraightInsertion(s. u.) erbt von dieser.</p>
<p>Wenn im Laufe des Programms bekannt ist, welcher Sortier-Algorithmus benutzt<br />
wird, soll die Variable überschrieben werden:</p>
<pre><code>void Logic::setAlgo(SortAlgo* algo)
	delete m_sort;
	m_sort = algo;
	m_sort-&gt;m_log = this;
}
</code></pre>
<p>Hier ein Ausschnitt aus meiner main.cpp:</p>
<pre><code>Logic l;
StraightInsertion* algo;
l.setAlgo(algo);
</code></pre>
<p>Das Problem ist hierbei, daß m_sort hinterher immer noch &quot;denkt&quot;, es sei ein<br />
SortAlgo und kein StraightInsertion. Was mache ich falsch bzw. wie geht es richtig?</p>
<p>Gruß, Tigger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/957942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/957942</guid><dc:creator><![CDATA[Tigger75]]></dc:creator><pubDate>Thu, 05 Jan 2006 16:07:37 GMT</pubDate></item><item><title><![CDATA[Reply to Variable mit erbender Klasse überschreiben on Thu, 05 Jan 2006 16:14:33 GMT]]></title><description><![CDATA[<p>Was du beschreibst ist mal prinzipiell richtig.<br />
Wahrscheinlich fehlt irgendwo ein virtual.<br />
oder du hast kein objekt angelegt</p>
<pre><code class="language-cpp">StraightInsertion* algo = new StraightInsertion;
</code></pre>
<p>Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/957951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/957951</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Thu, 05 Jan 2006 16:14:33 GMT</pubDate></item><item><title><![CDATA[Reply to Variable mit erbender Klasse überschreiben on Thu, 05 Jan 2006 16:21:27 GMT]]></title><description><![CDATA[<p>Was müßte denn jetzt virtual sein? Denn auch, wenn ich die main<br />
wie folgt ändere, bleibt der Fehler:</p>
<pre><code>Logic l;
StraightInsertion* algo = new StraightInsertion();
l.setAlgo(algo);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/957963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/957963</guid><dc:creator><![CDATA[Tigger75]]></dc:creator><pubDate>Thu, 05 Jan 2006 16:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to Variable mit erbender Klasse überschreiben on Thu, 05 Jan 2006 16:26:15 GMT]]></title><description><![CDATA[<p>Denke mal dass diene Sortieralgorythmen eine funktion sort() haben. Die müssten virtual sein.<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/957969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/957969</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Thu, 05 Jan 2006 16:26:15 GMT</pubDate></item><item><title><![CDATA[Reply to Variable mit erbender Klasse überschreiben on Thu, 05 Jan 2006 16:28:55 GMT]]></title><description><![CDATA[<p>ZuK schrieb:</p>
<blockquote>
<p>Denke mal dass diene Sortieralgorythmen eine funktion sort() haben. Die müssten virtual sein.<br />
Kurt</p>
</blockquote>
<p>Also sort ist in SortAlgo als virtual deklariert, in den erbenden<br />
Klassen dann natürlich nicht, da hier die Implementierung erfolgt.</p>
<p>Das hat ja aber auch nichts mit dem eigentlichen Problem zu tun, oder verstehe<br />
ich einfach nicht, was Du meinst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/957974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/957974</guid><dc:creator><![CDATA[Tigger75]]></dc:creator><pubDate>Thu, 05 Jan 2006 16:28:55 GMT</pubDate></item><item><title><![CDATA[Reply to Variable mit erbender Klasse überschreiben on Thu, 05 Jan 2006 16:34:46 GMT]]></title><description><![CDATA[<p>Tigger75 schrieb:</p>
<blockquote>
<p>Das hat ja aber auch nichts mit dem eigentlichen Problem zu tun, oder verstehe<br />
ich einfach nicht, was Du meinst?</p>
</blockquote>
<p>Wenn das so ist dann verstehe ich das Problem nicht.<br />
Habs so verstanden du setzt mit setAlgo(algo); den neuen algorythmus. Wenn du dann sort() afrufst dann wird trotzdem SortAlgo::sort() aufgerufen.<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/957980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/957980</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Thu, 05 Jan 2006 16:34:46 GMT</pubDate></item><item><title><![CDATA[Reply to Variable mit erbender Klasse überschreiben on Thu, 05 Jan 2006 16:38:17 GMT]]></title><description><![CDATA[<p>ZuK schrieb:</p>
<blockquote>
<p>Tigger75 schrieb:</p>
<blockquote>
<p>Das hat ja aber auch nichts mit dem eigentlichen Problem zu tun, oder verstehe<br />
ich einfach nicht, was Du meinst?</p>
</blockquote>
<p>Wenn das so ist dann verstehe ich das Problem nicht.<br />
Habs so verstanden du setzt mit setAlgo(algo); den neuen algorythmus. Wenn du dann sort() afrufst dann wird trotzdem SortAlgo::sort() aufgerufen.<br />
Kurt</p>
</blockquote>
<p>Ja, genau so ist es. Und weil sort in SortAlgo virtual ist, stürzt das Programm mit einem Speicherzugriffsfehler ab.</p>
<p>Ich hatte dann zum Testen eine Funktion geschrieben, die jeweils nur ausgibt &quot;Ich bin ein SortAlgo/StraightInsertion&quot; und so festgestellt, daß das Überschreiben nicht klappt.</p>
<p>Also, noch andere Ideen/Tips/Hilfe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/957983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/957983</guid><dc:creator><![CDATA[Tigger75]]></dc:creator><pubDate>Thu, 05 Jan 2006 16:38:17 GMT</pubDate></item><item><title><![CDATA[Reply to Variable mit erbender Klasse überschreiben on Thu, 05 Jan 2006 16:50:47 GMT]]></title><description><![CDATA[<p>Wenn das wirklich alles so ist wie du es beschreibst dann kann ich mir nur mehr vorstellen dass der pointer den du an setAlgo() übergibst nicht gültig ( initialisiert ) ist. Denke jetzt brauchen wir etwas code der das problem zeigt.<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/957996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/957996</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Thu, 05 Jan 2006 16:50:47 GMT</pubDate></item><item><title><![CDATA[Reply to Variable mit erbender Klasse überschreiben on Thu, 05 Jan 2006 17:09:27 GMT]]></title><description><![CDATA[<p>Also mehr Code gibt es dazu eigentlich nicht, ich habe alle relevanten<br />
Code-Stückchen oben aufgeführt... <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/958013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958013</guid><dc:creator><![CDATA[Tigger75]]></dc:creator><pubDate>Thu, 05 Jan 2006 17:09:27 GMT</pubDate></item><item><title><![CDATA[Reply to Variable mit erbender Klasse überschreiben on Thu, 05 Jan 2006 17:30:18 GMT]]></title><description><![CDATA[<p>Habe den code nach deinen Aussagen folgendermassen rekonstruiert.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class Logic;

class SortAlgo {
public:
   virtual void sort() { cout &lt;&lt; &quot;SortAlgo::sort()&quot; &lt;&lt; endl; }
   friend class Logic;
protected:
   Logic * m_log;   
};

class InsertionSort : public SortAlgo {
public:
   void sort() { cout &lt;&lt; &quot;InsertionSort::sort()&quot; &lt;&lt; endl; }
};

class Logic {
public:
   void setAlgo(SortAlgo* algo);
   void sort() { m_sort-&gt;sort(); }
protected:
   SortAlgo * m_sort;
};

void Logic::setAlgo(SortAlgo* algo) {
//    delete m_sort;
    m_sort = algo;
    m_sort-&gt;m_log = this;
}

int main() {
   SortAlgo * algo = new InsertionSort;
   Logic l;
   l.setAlgo(algo);
   l.sort();
   return 0;
}
</code></pre>
<p>Funktioniert einwandfrei.<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958031</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Thu, 05 Jan 2006 17:30:18 GMT</pubDate></item><item><title><![CDATA[Reply to Variable mit erbender Klasse überschreiben on Thu, 05 Jan 2006 22:24:05 GMT]]></title><description><![CDATA[<p>Hallo Kurt!</p>
<p>Nach stundenlangem Draufstarren ist mir jetzt endlich der Unterschied von Deinem<br />
zu meinem Code aufgefallen:</p>
<pre><code>SortAlgo * algo = new InsertionSort;
</code></pre>
<pre><code>StraightInsertion* algo = new StraightInsertion();
</code></pre>
<p>Wie gesagt, es sind immer die Kleinigkeiten und Flüchtigkeitsfehler, die einen<br />
vor lauter Bäumen den Wald nicht sehen lassen...</p>
<p>Vielen Dank für Deine Mühe!</p>
<p>Gruß, Tigger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958306</guid><dc:creator><![CDATA[Tigger75]]></dc:creator><pubDate>Thu, 05 Jan 2006 22:24:05 GMT</pubDate></item><item><title><![CDATA[Reply to Variable mit erbender Klasse überschreiben on Thu, 05 Jan 2006 22:53:03 GMT]]></title><description><![CDATA[<p>Mach es das nächste mal mit ner Policy, dann hast solche Probleme auch nicht.<br />
Der Quellcode ist ja im besten Fall grausam.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958333</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Thu, 05 Jan 2006 22:53:03 GMT</pubDate></item></channel></rss>