<?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[Verbung, eine Frage]]></title><description><![CDATA[<p>Hallo, eine kurze Frage warum folgendes nicht funktioniert</p>
<pre><code class="language-cpp">class Chef
{
   protected:
        int m;   //m hat für diese Beispiel mal den Wert 5
   public:
        virtual int mGet()
        {
             return m;
        }

};

class Arbeiter : public Chef
{
    public:
        Arbeiter();
       ~Arbeiter();
};

class Feld
{
      private: 
          int *pFeld    //für hier, annehmen das pFeld mit pFeld = new pFeld[10]            
                          erzeugt wurde
      public:
          int gib(Chef *pC)
          {
              return(pC-&gt;mGet());
          }
};

int main()
{ 
     Feld *f = new Feld;
     Arbeiter *a = new Arbeiter;
     f-&gt;gib(a);
     delete f; delete a;
}
</code></pre>
<p>Ich bekomme keine Fehler beim compileren.<br />
Das Problem ist f-&gt;gib(a) . Es erscheint keine<br />
Fehlermeldung und beim Ausführen kommt auch kein Fehler, nur es geht eben<br />
nicht. Die Funktion gib() erwartet ja eigentlich einen Zeiger vom Typ Chef.<br />
Aber da Arbeiter von Chef erbt, müsste das doch auch gehen.<br />
Zudem habe ich keine zusätzlichen Methoden in Arbeiter deklariert bzw. definiert.</p>
<p>Gibt es dafür eine Lösung, oder müsste ich für alles geerbte eine neue Funktion schreiben in der jeweils nur der Zeiger dem zu übergebenden Objekt entspricht ?</p>
<p>Grüße,<br />
c-mos</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144137/verbung-eine-frage</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 14:50:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144137.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Apr 2006 19:47:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verbung, eine Frage on Fri, 14 Apr 2006 19:47:28 GMT]]></title><description><![CDATA[<p>Hallo, eine kurze Frage warum folgendes nicht funktioniert</p>
<pre><code class="language-cpp">class Chef
{
   protected:
        int m;   //m hat für diese Beispiel mal den Wert 5
   public:
        virtual int mGet()
        {
             return m;
        }

};

class Arbeiter : public Chef
{
    public:
        Arbeiter();
       ~Arbeiter();
};

class Feld
{
      private: 
          int *pFeld    //für hier, annehmen das pFeld mit pFeld = new pFeld[10]            
                          erzeugt wurde
      public:
          int gib(Chef *pC)
          {
              return(pC-&gt;mGet());
          }
};

int main()
{ 
     Feld *f = new Feld;
     Arbeiter *a = new Arbeiter;
     f-&gt;gib(a);
     delete f; delete a;
}
</code></pre>
<p>Ich bekomme keine Fehler beim compileren.<br />
Das Problem ist f-&gt;gib(a) . Es erscheint keine<br />
Fehlermeldung und beim Ausführen kommt auch kein Fehler, nur es geht eben<br />
nicht. Die Funktion gib() erwartet ja eigentlich einen Zeiger vom Typ Chef.<br />
Aber da Arbeiter von Chef erbt, müsste das doch auch gehen.<br />
Zudem habe ich keine zusätzlichen Methoden in Arbeiter deklariert bzw. definiert.</p>
<p>Gibt es dafür eine Lösung, oder müsste ich für alles geerbte eine neue Funktion schreiben in der jeweils nur der Zeiger dem zu übergebenden Objekt entspricht ?</p>
<p>Grüße,<br />
c-mos</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037679</guid><dc:creator><![CDATA[c-mos]]></dc:creator><pubDate>Fri, 14 Apr 2006 19:47:28 GMT</pubDate></item><item><title><![CDATA[Reply to Verbung, eine Frage on Fri, 14 Apr 2006 22:28:10 GMT]]></title><description><![CDATA[<p>Wieso sollte da auch irgendetwas passieren?<br />
f-&gt;gib(a); gibt einen Wert zurück, den du nicht weiterverwendest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037711</guid><dc:creator><![CDATA[Neku]]></dc:creator><pubDate>Fri, 14 Apr 2006 22:28:10 GMT</pubDate></item><item><title><![CDATA[Reply to Verbung, eine Frage on Fri, 14 Apr 2006 23:21:54 GMT]]></title><description><![CDATA[<p>c-mos schrieb:</p>
<blockquote>
<p>Das Problem ist f-&gt;gib(a) . Es erscheint keine<br />
Fehlermeldung und beim Ausführen kommt auch kein Fehler, nur es geht eben<br />
nicht.</p>
</blockquote>
<p>Und das wäre was?</p>
<p>btw:<br />
Deine Klassen sind etwas seltsam. Zumindest ist nicht jeder Arbeiter auch ein Chef. Naja, vllt. höchstens sein eigener. <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="🙂"
    /> Und du solltest der Basisklasse auch einen virtuellen dtor spendieren, falls du's nicht schon hast und das beim geposteten Beispiel unter den Tisch gefallen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037727</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 14 Apr 2006 23:21:54 GMT</pubDate></item><item><title><![CDATA[Reply to Verbung, eine Frage on Sat, 15 Apr 2006 08:33:29 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Du solltest dir erstens überlegen, was genau die Funktion macht und was du erwartest und als zweites sollte dir bewusst werden, was public Vererbung bedeutet.</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037762</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 15 Apr 2006 08:33:29 GMT</pubDate></item><item><title><![CDATA[Reply to Verbung, eine Frage on Sat, 15 Apr 2006 09:04:02 GMT]]></title><description><![CDATA[<p>Ich habe hier manches unter den Tisch fallen lassen.<br />
Mir gehts eigentlich primär um diese Übergabe.<br />
Das mit Chef und Arbeiter macht wirklich nicht viel Sinn, stimmt.<br />
Aber ich habe das nur schnell hingeschrieben damit man sieht<br />
wo das Problem besteht.</p>
<p>Mir gehts darum wenn ich eine Klasse habe die mit verschiedenen abgeleiteten Klassen (mit der selben Basisklasse) arbeitet, ob ich dann im Funktionsargument<br />
void f(Chef *pC) schreiben kann, so dass ich dann alle abgeleiteten Klassen, mit der selben Basisklasse übergeben kann,...oder auch nicht.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037771</guid><dc:creator><![CDATA[c-mos]]></dc:creator><pubDate>Sat, 15 Apr 2006 09:04:02 GMT</pubDate></item><item><title><![CDATA[Reply to Verbung, eine Frage on Sat, 15 Apr 2006 09:16:49 GMT]]></title><description><![CDATA[<p>Doch kannst Du.</p>
<p>(Mal im Ernst, drei Leute haben Dir jetzt erzählt, dass der Code genau das tut was man erwarten würde, könntest Du bitte mal erläutern was &quot;eben nicht geht&quot;?!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037776</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sat, 15 Apr 2006 09:16:49 GMT</pubDate></item><item><title><![CDATA[Reply to Verbung, eine Frage on Sat, 15 Apr 2006 09:24:59 GMT]]></title><description><![CDATA[<p>c-mos schrieb:</p>
<blockquote>
<p>Mir gehts darum wenn ich eine Klasse habe die mit verschiedenen abgeleiteten Klassen (mit der selben Basisklasse) arbeitet, ob ich dann im Funktionsargument<br />
void f(Chef *pC) schreiben kann, so dass ich dann alle abgeleiteten Klassen, mit der selben Basisklasse übergeben kann,...oder auch nicht.</p>
</blockquote>
<p>Ja; wenn Chef die Basisklasse ist, kannst Du immer einen Pointer auf ein Objekt einer von Chef abgeleitete Klasse übergeben.</p>
<p>Noch 'ne Bemerkung: wenn Du nicht wirklich Pointer benötigst, solltest Du auch keine benutzen. Das macht nur Arbeit und man macht eher Fehler. Zum Beieiel im main; warum nicht so:</p>
<pre><code class="language-cpp">int main()
{
    Feld f;
    Arbeiter a;
    f.gib(&amp;a);
    return 0;
}
</code></pre>
<p>Das gleiche in Feld</p>
<pre><code class="language-cpp">class Feld
{
      private:
          int *pFeld    //für hier, annehmen das pFeld mit pFeld = new pFeld[10]            
                          erzeugt wurde
</code></pre>
<p>ich unterstelle, Du meinst 'pFeld = new int[10]'. Besser wäre dann:</p>
<pre><code class="language-cpp">class Feld
{
private:
    std::vector&lt; int &gt; pFeld;
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037783</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sat, 15 Apr 2006 09:24:59 GMT</pubDate></item></channel></rss>