<?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[&amp;quot;Gekoppelte&amp;quot; Vererbung?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Frage, wie man am besten folgendes Problem löst (oder ggf. ganz anders macht).</p>
<p>Vielleicht am besten gleich Code, der das illustriert. Weitere Member, die hier nichts zur Sache tun, habe ich im Sinne eines Minimalbeispiels weggelassen:</p>
<pre><code>struct BaseValue
{
	BaseValue(size_t res);
	BaseValue();
	virtual ~BaseValue();
	size_t resolution;
	std::vector&lt;double&gt; values;
};

struct DerivedValue : public BaseValue
{
	DerivedValue(size_t additionalParam, size_t res);
	DerivedValue();
	~DerivedValue();
	// resolution aus Basisklasse
	// values aus Basisklasse
	size_t addParam;
	std::vector&lt;double&gt;  paramvals;
};

struct BaseManagement
{
	BaseManagement();
	BaseManagement(std::vector&lt;std::string&gt; input);
	virtual ~Collection();
	size_t nbofentries;
	std::vector&lt;BaseValue&gt; entries;
	void someFunction(BaseValue foo);
};

struct DerivedManagement : public BaseManagement
{
	DerivedManagement(std::vector&lt;std::string&gt; input);
	~DerivedManagement();
	// nbofentries aus Basisklasse
	// entries aus Basisklasse
	size_t nbofparams;
	std::vector&lt;DerivedValue&gt; entries;  /// Hier ist das Problem:
// DerivedManagement hat ja dann zusätzlich den std::vector&lt;BaseValue&gt; entries
// aus der Basisklasse! Ich möchte aber, dass es hier nur einen
// std::vector&lt;DerivedValue&gt; gibt, der &quot;entries&quot; aus der Basisklasse ersetzt.
};
</code></pre>
<p>Wie kann man so eine Art &quot;gekoppelte&quot; Vererbung erreichen? Ich möchte, dass DerivedManagement auf der DerivedValue-Klasse aufsetzt, weiß aber nicht, wie ich die Vererbung des std::vector&lt;BaseValue&gt; entries überschreiben kann.</p>
<p>Oder ist das Design einfach Mist und ich sollte das ganz anders machen?</p>
<p>Viele Grüße vom<br />
inharator</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/331838/quot-gekoppelte-quot-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 02:42:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331838.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Mar 2015 07:44:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;quot;Gekoppelte&amp;quot; Vererbung? on Mon, 23 Mar 2015 07:44:16 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Frage, wie man am besten folgendes Problem löst (oder ggf. ganz anders macht).</p>
<p>Vielleicht am besten gleich Code, der das illustriert. Weitere Member, die hier nichts zur Sache tun, habe ich im Sinne eines Minimalbeispiels weggelassen:</p>
<pre><code>struct BaseValue
{
	BaseValue(size_t res);
	BaseValue();
	virtual ~BaseValue();
	size_t resolution;
	std::vector&lt;double&gt; values;
};

struct DerivedValue : public BaseValue
{
	DerivedValue(size_t additionalParam, size_t res);
	DerivedValue();
	~DerivedValue();
	// resolution aus Basisklasse
	// values aus Basisklasse
	size_t addParam;
	std::vector&lt;double&gt;  paramvals;
};

struct BaseManagement
{
	BaseManagement();
	BaseManagement(std::vector&lt;std::string&gt; input);
	virtual ~Collection();
	size_t nbofentries;
	std::vector&lt;BaseValue&gt; entries;
	void someFunction(BaseValue foo);
};

struct DerivedManagement : public BaseManagement
{
	DerivedManagement(std::vector&lt;std::string&gt; input);
	~DerivedManagement();
	// nbofentries aus Basisklasse
	// entries aus Basisklasse
	size_t nbofparams;
	std::vector&lt;DerivedValue&gt; entries;  /// Hier ist das Problem:
// DerivedManagement hat ja dann zusätzlich den std::vector&lt;BaseValue&gt; entries
// aus der Basisklasse! Ich möchte aber, dass es hier nur einen
// std::vector&lt;DerivedValue&gt; gibt, der &quot;entries&quot; aus der Basisklasse ersetzt.
};
</code></pre>
<p>Wie kann man so eine Art &quot;gekoppelte&quot; Vererbung erreichen? Ich möchte, dass DerivedManagement auf der DerivedValue-Klasse aufsetzt, weiß aber nicht, wie ich die Vererbung des std::vector&lt;BaseValue&gt; entries überschreiben kann.</p>
<p>Oder ist das Design einfach Mist und ich sollte das ganz anders machen?</p>
<p>Viele Grüße vom<br />
inharator</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447687</guid><dc:creator><![CDATA[inharator]]></dc:creator><pubDate>Mon, 23 Mar 2015 07:44:16 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;Gekoppelte&amp;quot; Vererbung? on Mon, 23 Mar 2015 08:05:11 GMT]]></title><description><![CDATA[<p>Wie wäre es, wenn du die Basisklasse templatisierst?</p>
<pre><code class="language-cpp">template&lt;class T&gt;
struct BaseManagement
{
    std::vector&lt;T&gt; entries;
};

struct DerivedManagement : public BaseManagement&lt;DerivedValue&gt;
{
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2447690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447690</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Mon, 23 Mar 2015 08:05:11 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;Gekoppelte&amp;quot; Vererbung? on Mon, 23 Mar 2015 09:34:54 GMT]]></title><description><![CDATA[<p>Ebtweder so wie mein Vorredner oder:</p>
<pre><code>struct AbstractManagement
{
    AbstractManagement();
    AbstractManagement(std::vector&lt;std::string&gt; input);
    virtual ~AbstractManagement();
    size_t nbofentries;
};

struct BaseManagement : public AbstractManagement
{
    BaseManagement(std::vector&lt;std::string&gt; input);
    ~BaseManagement();
    std::vector&lt;BaseValue&gt; entries;
    void someFunction(BaseValue foo);
};

struct DerivedManagement : public AbstractManagement
{
    DerivedManagement(std::vector&lt;std::string&gt; input);
    ~DerivedManagement();
    std::vector&lt;DerivedValue&gt; entries;
    void someFunction(DerivedValue foo);
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2447694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447694</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Mon, 23 Mar 2015 09:34:54 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;Gekoppelte&amp;quot; Vererbung? on Mon, 23 Mar 2015 11:13:06 GMT]]></title><description><![CDATA[<p>Danke! Ich habe die Lösung von daddy_felix ausprobiert und es funktioniert so wie es soll. Eigentlich simpel, bin aber nicht drauf gekommen <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9016">@MichelRT</a>: Auch wenn Dein Vorschlag für mich zu spät kam, ist es gut, auch eine zweite Lösungsmöglichkeit zu kennen.</p>
<p>Viele Grüße vom<br />
inharator</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447705</guid><dc:creator><![CDATA[inharator]]></dc:creator><pubDate>Mon, 23 Mar 2015 11:13:06 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;Gekoppelte&amp;quot; Vererbung? on Mon, 23 Mar 2015 11:50:04 GMT]]></title><description><![CDATA[<p>Achtung: die Template-Lösung hat aber auch Nachteile.<br />
Du hast damit 2 Basisklassen. Es ist somit unmöglich polimorphes Verhalten zu nutzen. Solange Du immer die konkreten Klassen verwendest ist das aber egal.<br />
Wenn Du aber eine Fabrikmethode verwendest die Dir Deine Managment-Objekte erzeugt und die dann als Referenz oder Zeiger auf die Basisklasse zurückliefert funktioniert die Template-Lösung so nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447709</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Mon, 23 Mar 2015 11:50:04 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;Gekoppelte&amp;quot; Vererbung? on Mon, 23 Mar 2015 17:52:55 GMT]]></title><description><![CDATA[<p>Man könnte auch eine non-Template Basisklasse machen die einen <code>vector&lt;unique_ptr&lt;BaseValue&gt;&gt;</code> hat.</p>
<p>Oder vor dem <code>BaseManagement</code> Template noch eine non-Template Basisklasse einziehen, die Dinge die vom konkreten Value-Type abhängig sind dann ggf. über virtuelle Funktionen an das <code>BaseManagement</code> Template delegiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447746</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 23 Mar 2015 17:52:55 GMT</pubDate></item></channel></rss>