<?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[Frage zu Oberklasse und Methoden in Unterklassen]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe folgende Probleme:</p>
<p>Ich habe eine Oberklasse &quot;ocl&quot; und davon zwei abgeleitete UnterKlassen &quot;uclass1&quot; und &quot;uclass2&quot;.</p>
<ol>
<li></li>
</ol>
<p>Ich möchte, dass alle Klassen, die von &quot;ocl&quot; abgeleitet sind, eine Methode</p>
<pre><code class="language-cpp">int read(const int param)
</code></pre>
<p>zur Verfügung stellen <strong>müssen</strong>. Diese soll aber jeweils unterschiedlich arbeiten (bei gleichen Parametern).<br />
Wie stelle ich das an ?</p>
<ol start="2">
<li></li>
</ol>
<p>Ich habe eine map in der sowohl Klassen &quot;uclass1&quot; als auch &quot;uclass2&quot; abgelegt werden sollen. Und nachdem in der map das richtige Element gefunden wurde, soll dann obige Funktion genutzt werden. Es soll aber entsprechend die richtige genutzt werden. Wenn das Objekt in der Map also vom Typ uclass1 ist, dann soll uclass1.read() genutzt werden, wenn der Tyo uclass2 ist, dann soll uclass2.read() genutzt werden.<br />
Ich stelle mir das so vor:</p>
<pre><code class="language-cpp">int egal = 12;
map&lt;int, ocl&gt; myMap;
map&lt;int, ocl&gt;::iterator it;
it = myMap.begin();
if (it-&gt;first == egal) {
    cout &lt;&lt; it-&gt;second.read(egal);
}
</code></pre>
<p>Geht das überhaupt ? Implementierung und ausprobieren scheitert momentan an Frage 1. <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="😉"
    /><br />
Bin noch recht neu in C++, kenne sonst nur Java. <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>
<p>Vielen Dank !!<br />
Benjamin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/135313/frage-zu-oberklasse-und-methoden-in-unterklassen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 22:18:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/135313.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Feb 2006 10:09:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 10:09:27 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe folgende Probleme:</p>
<p>Ich habe eine Oberklasse &quot;ocl&quot; und davon zwei abgeleitete UnterKlassen &quot;uclass1&quot; und &quot;uclass2&quot;.</p>
<ol>
<li></li>
</ol>
<p>Ich möchte, dass alle Klassen, die von &quot;ocl&quot; abgeleitet sind, eine Methode</p>
<pre><code class="language-cpp">int read(const int param)
</code></pre>
<p>zur Verfügung stellen <strong>müssen</strong>. Diese soll aber jeweils unterschiedlich arbeiten (bei gleichen Parametern).<br />
Wie stelle ich das an ?</p>
<ol start="2">
<li></li>
</ol>
<p>Ich habe eine map in der sowohl Klassen &quot;uclass1&quot; als auch &quot;uclass2&quot; abgelegt werden sollen. Und nachdem in der map das richtige Element gefunden wurde, soll dann obige Funktion genutzt werden. Es soll aber entsprechend die richtige genutzt werden. Wenn das Objekt in der Map also vom Typ uclass1 ist, dann soll uclass1.read() genutzt werden, wenn der Tyo uclass2 ist, dann soll uclass2.read() genutzt werden.<br />
Ich stelle mir das so vor:</p>
<pre><code class="language-cpp">int egal = 12;
map&lt;int, ocl&gt; myMap;
map&lt;int, ocl&gt;::iterator it;
it = myMap.begin();
if (it-&gt;first == egal) {
    cout &lt;&lt; it-&gt;second.read(egal);
}
</code></pre>
<p>Geht das überhaupt ? Implementierung und ausprobieren scheitert momentan an Frage 1. <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="😉"
    /><br />
Bin noch recht neu in C++, kenne sonst nur Java. <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>
<p>Vielen Dank !!<br />
Benjamin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982840</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Wed, 01 Feb 2006 10:09:27 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 10:19:56 GMT]]></title><description><![CDATA[<p>also, ich denk mal, ocl ist eine abstrakte klasse, also eine klasse von der man keine objekte erstellen kann. Das macht man so:</p>
<pre><code class="language-cpp">class ocl
{
   virtual void read() = 0;
};
</code></pre>
<p>das bedeutet, dass read nicht implementiert ist und erst in den unterklassen implementiert wird.</p>
<pre><code class="language-cpp">class uc1 : public ocl
{
virtual void read() { // tuwas; };
};

class uc2 : public ocl
{
virtual void read() { machwas anderes; };
};
</code></pre>
<p>damit ist sichergestellt, dass uc1 und uc2 die read-funktion überschreiben _müssen_.</p>
<p>2. Frage:<br />
In deiner Map darfst du keine Objekte von ocl speichern (geht ja sowieso nicht, ocl is ja abstrakt), sondern du musst zeiger auf die basisklasse (ocl) in der map speichern. Diese Basiszeiger können aber auch auch ucl1 und ucl2-objekte zeigen. Wenn du dann also map[1]-&gt;read() aufrufst, wird je nachdem, ob bei 1 auf ucl2 oder ucl1 gezeigt wird die passende funktion aufgerufen.<br />
Ich hoffe das war jetzt verständlich <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="🙂"
    /><br />
wenn nich such mal nach polymorphie (darauf basiert das nämlich, der ocl-zeiger ist polymorph und entscheidet zur laufzeit, auf was für ein objekt er genau denn jetzt zeigt)</p>
<p>Maxi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982847</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Wed, 01 Feb 2006 10:19:56 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 10:20:38 GMT]]></title><description><![CDATA[<p>Benja_m schrieb:</p>
<blockquote>
<p>Ich möchte, dass alle Klassen, die von &quot;ocl&quot; abgeleitet sind, eine Methode</p>
<pre><code class="language-cpp">int read(const int param)
</code></pre>
<p>zur Verfügung stellen <strong>müssen</strong>. Diese soll aber jeweils unterschiedlich arbeiten (bei gleichen Parametern).</p>
</blockquote>
<p>Das hört sich nach einer rein virtuellen Funktion an:</p>
<pre><code class="language-cpp">class ocl {
  ...
  virtual int read(int param) = 0; // const-Wertparameter machen nicht wirklich viel Sinn, schon gar nicht in einer Deklaration
};
</code></pre>
<p>Wenn du Java kennst, das ist das gleiche wie eine abstrakte Methode in Java.</p>
<blockquote>
<p>Ich habe eine map in der sowohl Klassen &quot;uclass1&quot; als auch &quot;uclass2&quot; abgelegt werden sollen. Und nachdem in der map das richtige Element gefunden wurde, soll dann obige Funktion genutzt werden. Es soll aber entsprechend die richtige genutzt werden. Wenn das Objekt in der Map also vom Typ uclass1 ist, dann soll uclass1.read() genutzt werden, wenn der Tyo uclass2 ist, dann soll uclass2.read() genutzt werden.</p>
</blockquote>
<p>Das ist Polymorphie (ermöglicht durch das Schlüsselwort virtual). Dazu musst du Zeiger auf ocl in die map packen, dann funktioniert das so, wie du dir das vorstellst:</p>
<pre><code class="language-cpp">map&lt;int, ocl*&gt; myMap;
map&lt;int, ocl*&gt;::iterator it;
// map füllen ...
it-&gt;second-&gt;read(egal);
// nicht vergessen, mapeinträge ggf. wieder zu deleten
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/982848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982848</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 01 Feb 2006 10:20:38 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 10:21:32 GMT]]></title><description><![CDATA[<p>hehe schneller <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/982850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982850</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Wed, 01 Feb 2006 10:21:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 10:22:13 GMT]]></title><description><![CDATA[<p>1. pur virtuelle Methoden:</p>
<pre><code class="language-cpp">class ocl
{
public:
  virtual int read(int param) = 0;
  //btw, &quot;const int&quot; ist Unsinn ;)
};

class ucl1 : public ocl
{
public:
  int read(int param) {...}
};

class ucl2 : public ocl
{
public:
  int read(int param) {...}
};
</code></pre>
<p>2. Speichere keine Objekte in der Map, sondern Pointer - dann klappt die Bestimmung der &quot;richtigen&quot; read()-Methode dank virtueller Methoden (und 1) von alleine.</p>
<pre><code class="language-cpp">map&lt;int ocl*&gt; myMap;
map&lt;int, ocl*&gt;::iterator pos=myMap.find(4711);
if(pos!=myMap.end()) return pos-&gt;second-&gt;read(0xAFFE);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/982851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982851</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Wed, 01 Feb 2006 10:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 10:31:52 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Danke euch !</p>
<p>Werd ich testen und dann Rückmeldung geben.</p>
<p>Bzgl. der const int - da hat mir mal jemand gesagt, so umgeht man das Problem, dass man ausversehen in die übergebenen Parameter etwas reinschreibt. Klang logisch, hab ich dann übernommen.</p>
<p>Benjamin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982854</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Wed, 01 Feb 2006 10:31:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 12:05:17 GMT]]></title><description><![CDATA[<p>Benja_m schrieb:</p>
<blockquote>
<p>Bzgl. der const int - da hat mir mal jemand gesagt, so umgeht man das Problem, dass man ausversehen in die übergebenen Parameter etwas reinschreibt. Klang logisch, hab ich dann übernommen.</p>
</blockquote>
<p>Das Problem bekommst du aber nur, wenn du die Parameter per Referenz übergibst - &quot;int&quot; wird als Kopie übergeben, hat also keine Rückwirkung auf den Aufrufer, &quot;int&amp;&quot; wird als Referenz übergeben, ändert also im Ernstfall den übergebenen Parameter.</p>
<p>(btw, Übergabe per const Referenz macht eher bei User-Klassen Sinn als bei eingebauten Typen wie int)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982908</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Wed, 01 Feb 2006 12:05:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 12:15:47 GMT]]></title><description><![CDATA[<p>soo, ich hab da zwar was, aber es klappt nicht. <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="🙂"
    /><br />
Ich hole hier mal weiter aus um genau aufzuzeigen, was ich mache und möglicherweise die fehlersuche zu erleichtern.<br />
sage dazu, ich arbeite unter linux mit eclipse und cdt und dem gcc 3.3.3</p>
<p>hier mal die Ausschnitte.</p>
<p>ocl.h (da werden FUnktionen und Variablen deklariert, die allen Unterklassen gemein sein sollen. Hier nur AUsschnitte)</p>
<pre><code class="language-cpp">...
class ocl {

public:
    ocl();
    virtual ~ocl();

    void setName(string name);
    virtual int read(int par) = 0;
    virtual string getName() = 0;

protected:
    string name;
....
};
</code></pre>
<p>ocl.cpp</p>
<pre><code class="language-cpp">ocl::ocl() {
    name = &quot;hallo&quot;;
}

ocl::~ocl() {
}

ocl::setName(string newName) {
    name = newName;
}
...
</code></pre>
<p>uclass1.h (hier jetzt eine der abgeleiteten Unterklassen)</p>
<pre><code class="language-cpp">class uclass1 : public ocl {
public:
    uclass1();
    virtual ~uclass1();
    int read(int par);
    string getName();
};
</code></pre>
<p>uclass1.cpp</p>
<pre><code class="language-cpp">uclass1::uclass1() {
    // tut einiges
}

uclass1::~uclass1() {
}

int uclass1::read(int par) {
    //tut was mit par und gibt dann was zurück
}

string uclass1::getName() {
    return name;
}
</code></pre>
<p>soo, und nun hab ich in einer anderen Klasse &quot;control&quot;.<br />
control.h</p>
<pre><code class="language-cpp">class control {
public:
    addUclass1();
private:
    map&lt;int, ocl*&gt; myMap;
};
</code></pre>
<pre><code class="language-cpp">control::control

control::addUclass1() {
    uclass1 ucl;
    ucl.setName(&quot;Ich bin doof&quot;);
    uclass1* pucl;
    pucl = ucl;

    myMap.insert(make_pair(100, pucl));
}

control::doIt() {
    map&lt;int, ocl*&gt;::iterator it;
    it = myMap.begin();
    cout &lt;&lt; &quot;name is = &quot; &lt;&lt; it-&gt;second-&gt;getName() &lt;&lt; endl;
}
</code></pre>
<p>Wenn ich nun in control erst addUclass1() aufrufe, und danach doIt(),<br />
dann kommt mein Programm bis zur Zeile vor dem cout.<br />
Aber dann bricht mein Programm einfach ab. Keine Fehlermeldung, kein garnix. Es passiert einfach nichts mehr.<br />
Der Aufruf</p>
<pre><code class="language-cpp">it-&gt;second-&gt;getName();
</code></pre>
<p>muss irgendetwas schlimmes sein.<br />
Ein</p>
<pre><code class="language-cpp">it-&gt;second-&gt;read(73);
</code></pre>
<p>bewirkt identisches <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="😞"
    /><br />
Ich sehe nur nicht, wieso und was dort passiert.<br />
Ich habe das jetzt stark gekürzt/vereinfacht. Ich hoffe, mein Problem wird deutlich und ich habe keine wichtigen Sachen vergessen dazuzusagen.<br />
Wenn doch bitte fragen !</p>
<p>Danke euch !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982913</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Wed, 01 Feb 2006 12:15:47 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 12:18:45 GMT]]></title><description><![CDATA[<p>sorry, Tippfehler oben:</p>
<pre><code class="language-cpp">control::addUclass1() {
    uclass1 ucl;
    ucl.setName(&quot;Ich bin doof&quot;);
    uclass1* pucl;
    pucl = &amp; ucl;

    myMap.insert(make_pair(100, pucl));
}
</code></pre>
<p>muss mich mal registrieren um editieren zu können <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/982918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982918</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Wed, 01 Feb 2006 12:18:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 12:27:32 GMT]]></title><description><![CDATA[<p>Maxi schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class ocl
{
   virtual void read() = 0;
};
</code></pre>
<p>das bedeutet, dass read nicht implementiert ist und erst in den unterklassen implementiert wird.</p>
</blockquote>
<p>Das ist so nicht ganz richtig. Eine Implementation kann da sein - und muss z.B. auch im Falle eine pure virtual Destruktors. Man wird auf jeden Fall zum Überschreiben der Methode gezwungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982922</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 01 Feb 2006 12:27:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 12:31:45 GMT]]></title><description><![CDATA[<p>addUclass1() kann so nicht funktionieren. Du speicherst in deiner map einen Pointer auf ein lokales Objekt welches nach Verlassen der Funktion nicht mehr gültig ist. Du mußt den Pointer schon dynamisch erstellen (mit new) und zum Schluß natürlich auch wieder löschen (im Destruktor von control).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982929</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 01 Feb 2006 12:31:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 12:33:04 GMT]]></title><description><![CDATA[<p>@Benja: Du kannst keine Pointer auf lokale Variablen in die map packen (OK, du kannst schon, solltest aber nicht). Die Variable 'ucl' wird am Ende der Funktion addUclass1() wieder gelöscht und der Pointer, den du in die map gelegt hast, zeigt anschließend ins Nirvana. Besser ist es, die Variable per new auf dem Heap anzulegen (und im Destruktor deiner control-Klasse für alle Map-Einträge delete aufzurufen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982932</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Wed, 01 Feb 2006 12:33:04 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 12:33:45 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p>Maxi schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class ocl
{
   virtual void read() = 0;
};
</code></pre>
<p>das bedeutet, dass read nicht implementiert ist und erst in den unterklassen implementiert wird.</p>
</blockquote>
<p>Das ist so nicht ganz richtig. Eine Implementation kann da sein - und muss z.B. auch im Falle eine pure virtual Destruktors. Man wird auf jeden Fall zum Überschreiben der Methode gezwungen.</p>
</blockquote>
<p>auch wenns offtopic ist: welcher teufel kann einen Menschen dazu bewegen, dass er einen pure virtual dtor benutzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982933</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 01 Feb 2006 12:33:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 12:35:00 GMT]]></title><description><![CDATA[<p>Benja_m schrieb:</p>
<blockquote>
<p>soo, und nun hab ich in einer anderen Klasse &quot;control&quot;.<br />
control.h</p>
<pre><code class="language-cpp">class control {
public:
    addUclass1();
private:
    map&lt;int, ocl*&gt; myMap;
};
</code></pre>
<pre><code class="language-cpp">control::control

control::addUclass1() {
    uclass1 ucl;
    ucl.setName(&quot;Ich bin doof&quot;);
    uclass1* pucl;
    pucl = ucl;
    
    myMap.insert(make_pair(100, pucl));
}
</code></pre>
</blockquote>
<p>zu control::addUclass1: Ich wundere mich, dass das compiliert wird. Sicher, dass da nicht steht pucl = **&amp;**ucl; ? Nunja, in jedem Falle fügst du damit einen Zeiger auf ein lokales Objekt in die Map ein, und wie du sicher weißt, werden lokale Objekte zerstört, sobald ihr Gültigkeitsbereit (in dem Falle also die Funktion addUclass1) verlassen wird. In der Map steht somit ein Pointer, der auf irgendwas unbestimmtes zeigt.</p>
<p>Die Lösung besteht darin, Objekte mit dynamischer Lebensdauer in die Map einzufügen:</p>
<pre><code class="language-cpp">void control::addUclass1() {
    uclass1* ucl = new uclass1();
    ucl-&gt;setName(&quot;Ich bin doof&quot;);
    myMap.insert(make_pair(100, ucl));
}
</code></pre>
<p>irgendwann müssen diese Objekte auch wieder zerstört werden, diesmal manuell:</p>
<pre><code class="language-cpp">for (map&lt;int,ocl*&gt;::const_iterator it = myMap.begin(); it != myMap.end(); ++it)
  delete it-&gt;second;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/982935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982935</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 01 Feb 2006 12:35:00 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 12:36:43 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>auch wenns offtopic ist: welcher teufel kann einen Menschen dazu bewegen, dass er einen pure virtual dtor benutzt?</p>
</blockquote>
<p>Dafür könnte man einen beliebigen, konstruierten Grund einsetzen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> Ob man abstrakten Methoden eine Implementation verpasst oder nicht ist sicherlich diskuissionswürdig - aber grundsätzlich geht es und ist erlaubt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982939</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 01 Feb 2006 12:36:43 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Oberklasse und Methoden in Unterklassen on Wed, 01 Feb 2006 14:17:19 GMT]]></title><description><![CDATA[<p>@all:<br />
Manchmal sieht man den Wald vor lauter Bäumen nicht.<br />
Lokale Variable... Lernt man eigentlich ziemlich früh beim Programmieren ...<br />
Und ich habs nichtmal beim Abtippen/Abstrahieren gemerkt <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="😞"
    /><br />
Herzlichen Dank, jetzt klappt es.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/904">@Bashar</a>:<br />
siehe <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-982918.html#982918" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-982918.html#982918</a><br />
Natürlich hatte ich das &amp; vergessen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/983076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/983076</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Wed, 01 Feb 2006 14:17:19 GMT</pubDate></item></channel></rss>