<?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[Vererbungsfrage]]></title><description><![CDATA[<p>Hi,</p>
<p>ich lerne im Moment C++ und ich bin im Moment an einem Problem, dass ich noch nicht so ganz verstehe:</p>
<p>Es existieren 2 Klassen, genannt &quot;Base&quot; und &quot;Foo&quot;. Base verfügt über einen public Integer-Array (mit 3 Elementen). Es ist völlig egal ob das jetzt ein Array oder ein Vector ist, falls das jemand anmerken will.</p>
<p>Was ich will:<br />
Ich will die Werte des Integer-Arrays aus &quot;Base&quot; mit der Klasse &quot;Foo&quot; manipulieren ohne Vererbung. Muss ich hierfür das &quot;Base&quot;-Objekt im Konstruktor von &quot;Foo&quot; der Klasse übergeben? Wenn ja, habe ich irgendwo einen Denkfehler und es funktioniert trotzdem nicht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Base {
public:
	int values[3];
	void showValues();
};

void Base::showValues() {
	std::cout &lt;&lt; &quot;Value 0: &quot; &lt;&lt; values[0] &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;Value 1: &quot; &lt;&lt; values[1] &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;Value 2: &quot; &lt;&lt; values[2] &lt;&lt; std::endl;
}

class Foo {
private:
	Base b;
public:
	Foo(Base &amp;b);
	void setValue(int v, int x) {
		b.values[v] = x;
	}
};

Foo::Foo(Base &amp;b) {
	this-&gt;b = b;
}

int main() {
	Base B;
	Foo a(B);
	a.setValue(0, 910);

	B.showValues();

	system(&quot;PAUSE&quot;);
	return 0;
}
</code></pre>
<p>Eigentlich sollte der erste Wert(0) 910 sein - ist er aber nicht. Liegt der Fehler evtl. bei der Übergabe des Objekts? Kopiere ich das Objekt hier nur und Foo arbeitet mit einer &quot;eigenständigen&quot; Version von &quot;Base&quot;?</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/308157/vererbungsfrage</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 02:04:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/308157.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 16 Sep 2012 23:04:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbungsfrage on Sun, 16 Sep 2012 23:04:50 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich lerne im Moment C++ und ich bin im Moment an einem Problem, dass ich noch nicht so ganz verstehe:</p>
<p>Es existieren 2 Klassen, genannt &quot;Base&quot; und &quot;Foo&quot;. Base verfügt über einen public Integer-Array (mit 3 Elementen). Es ist völlig egal ob das jetzt ein Array oder ein Vector ist, falls das jemand anmerken will.</p>
<p>Was ich will:<br />
Ich will die Werte des Integer-Arrays aus &quot;Base&quot; mit der Klasse &quot;Foo&quot; manipulieren ohne Vererbung. Muss ich hierfür das &quot;Base&quot;-Objekt im Konstruktor von &quot;Foo&quot; der Klasse übergeben? Wenn ja, habe ich irgendwo einen Denkfehler und es funktioniert trotzdem nicht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Base {
public:
	int values[3];
	void showValues();
};

void Base::showValues() {
	std::cout &lt;&lt; &quot;Value 0: &quot; &lt;&lt; values[0] &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;Value 1: &quot; &lt;&lt; values[1] &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;Value 2: &quot; &lt;&lt; values[2] &lt;&lt; std::endl;
}

class Foo {
private:
	Base b;
public:
	Foo(Base &amp;b);
	void setValue(int v, int x) {
		b.values[v] = x;
	}
};

Foo::Foo(Base &amp;b) {
	this-&gt;b = b;
}

int main() {
	Base B;
	Foo a(B);
	a.setValue(0, 910);

	B.showValues();

	system(&quot;PAUSE&quot;);
	return 0;
}
</code></pre>
<p>Eigentlich sollte der erste Wert(0) 910 sein - ist er aber nicht. Liegt der Fehler evtl. bei der Übergabe des Objekts? Kopiere ich das Objekt hier nur und Foo arbeitet mit einer &quot;eigenständigen&quot; Version von &quot;Base&quot;?</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251744</guid><dc:creator><![CDATA[Fiedl]]></dc:creator><pubDate>Sun, 16 Sep 2012 23:04:50 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Sun, 16 Sep 2012 23:34:43 GMT]]></title><description><![CDATA[<p>Und Pardon, der Titel passt eigentlich nicht. Es ist eindeutig zu spät...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251746</guid><dc:creator><![CDATA[Fiedl]]></dc:creator><pubDate>Sun, 16 Sep 2012 23:34:43 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Sun, 16 Sep 2012 23:43:00 GMT]]></title><description><![CDATA[<p>in Zeile 26 erstellst du eine Kopie von B.<br />
Das B in Foo ist danach ein anderes wie das B in der main.<br />
Mach Zeile 17 zu Base &amp;b, dann sollte es so gehen, wie du denkst.</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251747</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Sun, 16 Sep 2012 23:43:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Sun, 16 Sep 2012 23:52:40 GMT]]></title><description><![CDATA[<p>Okay, hat soweit geklappt, danke. Ich musste nur beim Konstruktor von Foo direkt noch die Initialisierung von b anhängen:</p>
<pre><code class="language-cpp">Foo::Foo(Base &amp;b) : b(b) {
</code></pre>
<p>Irgendwie aber sagt mir mein Gefühl, dass das Ganze nicht wirklich schön ist? Oder ist es schön? Ich würde mir ungern unschönes Design angewöhnen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251748</guid><dc:creator><![CDATA[Fiedl]]></dc:creator><pubDate>Sun, 16 Sep 2012 23:52:40 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Mon, 17 Sep 2012 02:32:57 GMT]]></title><description><![CDATA[<p>solange irgendwann dokumentiert ist, dass das Objekt B durch Foo verändert wird, ist das schon in Ordnung</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251750</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Mon, 17 Sep 2012 02:32:57 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Mon, 17 Sep 2012 03:07:30 GMT]]></title><description><![CDATA[<p>KN4CK3R schrieb:</p>
<blockquote>
<p>solange irgendwann dokumentiert ist, dass das Objekt B durch Foo verändert wird, ist das schon in Ordnung</p>
<p>greetz KN4CK3R</p>
</blockquote>
<p>Zur Not zu erkennen am Konstruktor (const correctness)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251752</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Mon, 17 Sep 2012 03:07:30 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Mon, 17 Sep 2012 06:09:06 GMT]]></title><description><![CDATA[<p>camper sagt, Referenzen als Member-Variablen sind schlechtes Design- und camper ist hier der king.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251765</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Mon, 17 Sep 2012 06:09:06 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Mon, 17 Sep 2012 07:41:10 GMT]]></title><description><![CDATA[<p>Um das nochmal klar zu stellen: a.b und B sind zwei verschiedene Objekte. Du machst im wesentlichen nichts anderes als</p>
<pre><code class="language-cpp">int x;
int y;
y = x;
x = 910;
cout &lt;&lt; y;
</code></pre>
<p>und wunderst dich, dass, wenn du y ausgibst, da nicht garantiert 910 rauskommt.</p>
<p>Fiedl schrieb:</p>
<blockquote>
<p>Was ich will:<br />
Ich will die Werte des Integer-Arrays aus &quot;Base&quot; mit der Klasse &quot;Foo&quot; manipulieren ohne Vererbung. Muss ich hierfür das &quot;Base&quot;-Objekt im Konstruktor von &quot;Foo&quot; der Klasse übergeben?</p>
</blockquote>
<p>Das mit der Referenz (wie vorgeschlagen) ist eine Option. Alternativ kannst du in Foo eine Zeigervariable definieren und übergibst dem Konstruktor die Adresse von B, so dass diese im Zeiger gespeichert werden kann:</p>
<pre><code class="language-cpp">...
class Foo {
private:
   Base* zeiger;
public:
   explicit Foo(Base* p);

   void setValue(int v, int x) {
      b-&gt;values[v] = x;
   }
};

Foo::Foo(Base* p)
:ptr(p)
{}

int main() {
   Base B;
   Foo a(&amp;B); // Adresse holen und übergeben
   ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2251775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251775</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 17 Sep 2012 07:41:10 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Mon, 17 Sep 2012 07:59:46 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>camper sagt, Referenzen als Member-Variablen sind schlechtes Design- und camper ist hier der king.</p>
</blockquote>
<p>Irgendwie bin ich mir sicher, dass er das nicht so absolut pauschal gesagt haben wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251779</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 17 Sep 2012 07:59:46 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Mon, 17 Sep 2012 10:26:13 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>camper sagt, Referenzen als Member-Variablen sind schlechtes Design- und camper ist hier der king.</p>
</blockquote>
<p>Irgendwie bin ich mir sicher, dass er das nicht so absolut pauschal gesagt haben wird...</p>
</blockquote>
<p>Nein hat er nicht, da hast du natürlich Recht. Ich such gleich den Link raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251842</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Mon, 17 Sep 2012 10:26:13 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Mon, 17 Sep 2012 10:28:31 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>[...]<br />
Allerdings sind Referenzen [...] ohnehin in fast allen Klassen deplaziert.</p>
</blockquote>
<p><a href="http://www.c-plusplus.net/forum/p1815796" rel="nofollow">http://www.c-plusplus.net/forum/p1815796</a>, dritter Post.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251844</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Mon, 17 Sep 2012 10:28:31 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Mon, 17 Sep 2012 11:23:01 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>camper sagt, Referenzen als Member-Variablen sind schlechtes Design- und camper ist hier der king.</p>
</blockquote>
<p>Irgendwie bin ich mir sicher, dass er das nicht so absolut pauschal gesagt haben wird...</p>
</blockquote>
<p>Jedenfalls betrachte ich es nicht als Designfrage.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251893</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 17 Sep 2012 11:23:01 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Mon, 17 Sep 2012 11:40:10 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>[...]<br />
Allerdings sind Referenzen [...] ohnehin in fast allen Klassen deplaziert.</p>
</blockquote>
<p><a href="http://www.c-plusplus.net/forum/p1815796" rel="nofollow">http://www.c-plusplus.net/forum/p1815796</a>, dritter Post.</p>
</blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Meine Aussage war auch primär eher an weniger Erfahrene gerichtet</p>
</blockquote>
<p>Später in dem Thread <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>
<p>Außerdem:</p>
<p>camper schrieb:</p>
<blockquote>
<p>Proxies: da diese Referenzen imitieren, überrascht hier nicht, dass Referenzen als Member verwendbar sind, da Kopier- und Zuweisungssemantik auseinanderfallen.</p>
</blockquote>
<p>Und in diesem Thread verhält sich Foo ähnlich einem Proxy für das Base-Objekt, das der Ctor übergeben bekommt.</p>
<p>Hier handelt es sich also um einen der Fälle, die camper in seiner nicht-Design-Aussage explizit nicht gemeint hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251899</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 17 Sep 2012 11:40:10 GMT</pubDate></item></channel></rss>