<?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[Zugriff auf member von Subklasse von oben]]></title><description><![CDATA[<p>Hallo,</p>
<p>blöder titel aber ich weiß nicht wie ichs beschreiben könnte.<br />
Ich möchte auf Member einer erbenden Klasse zugreifen. Evtl. Blödsinn aber<br />
mir geht es um folgendes: Ich möchte in der main auf der einen seite nur einen code als schnittstelle über Base aufrufen müssen und auf der anderen seite aber auf member der subklassen von base zugreifen.</p>
<p>Ich sehe im moment nur 2 Möglichkeiten:<br />
a) Getter-Methoden in Base zu implementieren um so von unten nach oben durchzugreifen<br />
b) Immer mit einem if-else konstrukt zwei verschiedene MyClass.bar(mtxdouble)<br />
bzw. MyClass.bar(mtxcomplex) aufrufen zu können.</p>
<p>Beides finde ich unschön. Gibt es eine andere Möglichkeit?</p>
<p>Pseudocode:</p>
<pre><code class="language-cpp">// MyClass.cpp
void MyClass::bar(Base&amp; base)
{
     std::cout &lt;&lt; base.variable &lt;&lt; std::endl; // ???
}

class Base
{
   public:
      virtual ~Base() {}
      virtual void foo() = 0;
};

class MtxDouble : Base
{
   public:
      void foo() { std::cout &lt;&lt; &quot;do some&quot; &lt;&lt; std::endl;}
      int variable;
};
class MtxComplex : Base
{
   public:
      void foo() { std::cout &lt;&lt; &quot;do some&quot; &lt;&lt; std::endl;}
      int variable;
};

int main()
{
   Base* mtx = NULL;
   MtxDouble mtxdouble;
   MtxComplex mtxcomplex;

   if (i = 0) mtx = &amp;mtxdouble;
   else mtx = &amp;mtxcomplex;

   mtx-&gt;foo();

   // hier möchte ich aber auf einen Member von mtxdouble/mtxcomplex zugreifen
   int a = mtx-&gt;variable; //???
   MyClass.bar();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/256301/zugriff-auf-member-von-subklasse-von-oben</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 16:19:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256301.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 Dec 2009 17:07:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriff auf member von Subklasse von oben on Thu, 10 Dec 2009 17:07:39 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>blöder titel aber ich weiß nicht wie ichs beschreiben könnte.<br />
Ich möchte auf Member einer erbenden Klasse zugreifen. Evtl. Blödsinn aber<br />
mir geht es um folgendes: Ich möchte in der main auf der einen seite nur einen code als schnittstelle über Base aufrufen müssen und auf der anderen seite aber auf member der subklassen von base zugreifen.</p>
<p>Ich sehe im moment nur 2 Möglichkeiten:<br />
a) Getter-Methoden in Base zu implementieren um so von unten nach oben durchzugreifen<br />
b) Immer mit einem if-else konstrukt zwei verschiedene MyClass.bar(mtxdouble)<br />
bzw. MyClass.bar(mtxcomplex) aufrufen zu können.</p>
<p>Beides finde ich unschön. Gibt es eine andere Möglichkeit?</p>
<p>Pseudocode:</p>
<pre><code class="language-cpp">// MyClass.cpp
void MyClass::bar(Base&amp; base)
{
     std::cout &lt;&lt; base.variable &lt;&lt; std::endl; // ???
}

class Base
{
   public:
      virtual ~Base() {}
      virtual void foo() = 0;
};

class MtxDouble : Base
{
   public:
      void foo() { std::cout &lt;&lt; &quot;do some&quot; &lt;&lt; std::endl;}
      int variable;
};
class MtxComplex : Base
{
   public:
      void foo() { std::cout &lt;&lt; &quot;do some&quot; &lt;&lt; std::endl;}
      int variable;
};

int main()
{
   Base* mtx = NULL;
   MtxDouble mtxdouble;
   MtxComplex mtxcomplex;

   if (i = 0) mtx = &amp;mtxdouble;
   else mtx = &amp;mtxcomplex;

   mtx-&gt;foo();

   // hier möchte ich aber auf einen Member von mtxdouble/mtxcomplex zugreifen
   int a = mtx-&gt;variable; //???
   MyClass.bar();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1820798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820798</guid><dc:creator><![CDATA[Gambo2000]]></dc:creator><pubDate>Thu, 10 Dec 2009 17:07:39 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf member von Subklasse von oben on Thu, 10 Dec 2009 17:16:10 GMT]]></title><description><![CDATA[<p>Mach eine virtuelle Methode, die dir den Wert der Variable liefert und ueberschreibe diese in deinen abgeleiteten Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820803</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 10 Dec 2009 17:16:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf member von Subklasse von oben on Thu, 10 Dec 2009 17:17:56 GMT]]></title><description><![CDATA[<p>Danke knivil: Ist das so üblich und wenn ja - dann muss ich ja für jede membervariable eine eigene methode schreiben....wirklich ein sinnvoller schöner weg?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820806</guid><dc:creator><![CDATA[Gambo2000]]></dc:creator><pubDate>Thu, 10 Dec 2009 17:17:56 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf member von Subklasse von oben on Thu, 10 Dec 2009 17:23:24 GMT]]></title><description><![CDATA[<p>Gambo2000 schrieb:</p>
<blockquote>
<p>Danke knivil: Ist das so üblich und wenn ja - dann muss ich ja für jede membervariable eine eigene methode schreiben....wirklich ein sinnvoller schöner weg?</p>
</blockquote>
<p>Natürlich, denn eine ordentliche Klasse hat ja gar keine öffentlichen Daten <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820812</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Thu, 10 Dec 2009 17:23:24 GMT</pubDate></item></channel></rss>