<?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[Vererbung, Probleme beim access von Daten]]></title><description><![CDATA[<p>Hallo,</p>
<p>erstmal fiel mir kein passender Titel ein, sorry dafür. Nun also zum Problem.</p>
<p>Ich habe eine Klasse Instruktion, die einen protected string hat, und 3 Klassen die davon erben, die haben zusätzlich noch 1 int / 2 ints / 2 strings.</p>
<p>In einer anderen Klasse erstelle ich mir dynamisch ein Array von Zeigern von Instruktionen, je nach input werden dann zu den Zeigern dynamisch Objekte der vererbten Klassen zugewiesen.</p>
<pre><code class="language-cpp">class Instruction
{
protected:
    std::string statement;
/* ... */
};

class onevalue : public Instruction
{
private:
    int firstvalue;
  /* ... */
};

class Aprogram
{
private:
    Instruction** program; // array of Instruction pointers
    /* ... */
};

// Auszug aus Aprogram Funktion
onevalue* A = new onevalue(instr, first);
program[current] = A;
</code></pre>
<p>Nur will ich z.B. von program[2]-&gt;firstvalue haben. Allerdings sagt mir der Compiler, dass die Klasse Instruction kein Wert firstvalue hat. Wie löse ich das Problem, so dass ich ihm sagen kann, dass ich an program[2]-&gt;firstvalue rankommen will, wenn ich doch weiss dass es keine Instruktion, sondern ein onevalue ist.</p>
<p>Versteht ihr mein Problem, oder soll cih das noch weiter erläutern?</p>
<p>EInSti</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/242073/vererbung-probleme-beim-access-von-daten</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 05:06:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242073.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 29 May 2009 15:52:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung, Probleme beim access von Daten on Fri, 29 May 2009 15:52:37 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>erstmal fiel mir kein passender Titel ein, sorry dafür. Nun also zum Problem.</p>
<p>Ich habe eine Klasse Instruktion, die einen protected string hat, und 3 Klassen die davon erben, die haben zusätzlich noch 1 int / 2 ints / 2 strings.</p>
<p>In einer anderen Klasse erstelle ich mir dynamisch ein Array von Zeigern von Instruktionen, je nach input werden dann zu den Zeigern dynamisch Objekte der vererbten Klassen zugewiesen.</p>
<pre><code class="language-cpp">class Instruction
{
protected:
    std::string statement;
/* ... */
};

class onevalue : public Instruction
{
private:
    int firstvalue;
  /* ... */
};

class Aprogram
{
private:
    Instruction** program; // array of Instruction pointers
    /* ... */
};

// Auszug aus Aprogram Funktion
onevalue* A = new onevalue(instr, first);
program[current] = A;
</code></pre>
<p>Nur will ich z.B. von program[2]-&gt;firstvalue haben. Allerdings sagt mir der Compiler, dass die Klasse Instruction kein Wert firstvalue hat. Wie löse ich das Problem, so dass ich ihm sagen kann, dass ich an program[2]-&gt;firstvalue rankommen will, wenn ich doch weiss dass es keine Instruktion, sondern ein onevalue ist.</p>
<p>Versteht ihr mein Problem, oder soll cih das noch weiter erläutern?</p>
<p>EInSti</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718032</guid><dc:creator><![CDATA[EinSti]]></dc:creator><pubDate>Fri, 29 May 2009 15:52:37 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung, Probleme beim access von Daten on Fri, 29 May 2009 16:43:39 GMT]]></title><description><![CDATA[<p>Mach eine virtuelle Funktion, die du dann in onevalue überscheibst und den richtigen Wert zurückgibst.</p>
<pre><code class="language-cpp">class Instruction
{
protected:
    std::string statement;
public:
    virtual int get_firstvalue () const = 0;
/* ... */
};

class onevalue : public Instruction
{
private:
    int firstvalue;

public:
    int get_firstvalue () const { return firstvalue; }
  /* ... */
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1718050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718050</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 29 May 2009 16:43:39 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung, Probleme beim access von Daten on Fri, 29 May 2009 16:47:35 GMT]]></title><description><![CDATA[<p>Entweder castest du (static_cast, dynamic_cast), oder aber du packst die &quot;getter&quot; Funktionen alle mit in die &quot;instruction&quot; Klasse. Bei Instructions die irgendeinen bestimmten Wert nicht haben, kannst du dann entweder den &quot;getter&quot; einen Dummy-Wert zurückgeben lassen, oder eine Exception (z.B: std::logic_error) werfen.</p>
<p>Was zu deinem Vorhaben besser passt kann ich nicht sagen.</p>
<p>Oder natürlich du verzichtest gänzlich auf Polymorphismus, und packst sämtliche möglichen &quot;Teile&quot; in eine struct, und greifst dann direkt darauf zu. Kann auch manchmal Sinn machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718051</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 29 May 2009 16:47:35 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung, Probleme beim access von Daten on Fri, 29 May 2009 16:59:46 GMT]]></title><description><![CDATA[<p>Da wa wohl wer 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>
<p>Ich würde hier aber die Funktion eher nicht pure (&quot;= 0&quot;) machen, sondern den &quot;gibt's garnicht&quot; Code (also z.B. Exception werfen) in der Basisklasse als Default-Implementierung anbieten.</p>
<p>Klassen die einen bestimmten Wert dann nicht haben, müssen dann die dazugehörige &quot;getter&quot; Funktion einfach garnicht implementieren. Bei vielen möglichen Werten und vielen möglichen Klassen spart das enorm viel Tipparbeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718055</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 29 May 2009 16:59:46 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung, Probleme beim access von Daten on Fri, 29 May 2009 17:14:10 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Da wa wohl wer 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>
<p>Ich würde hier aber die Funktion eher nicht pure (&quot;= 0&quot;) machen, sondern den &quot;gibt's garnicht&quot; Code (also z.B. Exception werfen) in der Basisklasse als Default-Implementierung anbieten.</p>
<p>Klassen die einen bestimmten Wert dann nicht haben, müssen dann die dazugehörige &quot;getter&quot; Funktion einfach garnicht implementieren. Bei vielen möglichen Werten und vielen möglichen Klassen spart das enorm viel Tipparbeit.</p>
</blockquote>
<p>Ja. War nur ein Denkanstoss. Mir ist danach auch aufgefallen, dass es wahrscheinlich nicht wirklich der Sinn von Instruction sein sollte als solche Basis zu gelten, aber ohne genaueres über die Klasse zu wissen ist das schwer zu entscheiden. Allenfalls wäre es hier auch angebracht eine komplett neue abstrakte Klasse als Basis zu entwerfen, aber das soll ja nicht unsere Entscheidung sein. <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/1718060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718060</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 29 May 2009 17:14:10 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung, Probleme beim access von Daten on Fri, 29 May 2009 17:51:57 GMT]]></title><description><![CDATA[<p>Die Instruction class ist noch sehr komplex und kann leider nicht abstract gemacht werden. Aber danke für den Tip mit der virtuellen getter funktion, werd es es so machen. Topic kann geclosed werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718073</guid><dc:creator><![CDATA[EinSti]]></dc:creator><pubDate>Fri, 29 May 2009 17:51:57 GMT</pubDate></item></channel></rss>