<?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[Printausgabe bei Aggregation]]></title><description><![CDATA[<p>Hallo!<br />
Hab hier eine Klasse Haus mit einer Aggregation zur Klasse Stock.<br />
Haus benutzt Liste vom Typ Stock.<br />
Bei der Printausgabe (virtual) von der Klasse Haus aus verliere ich aus einem Grund die Werte vom Stock. Kann mir vllt irgendjemand da weiterhelfen?</p>
<p>Für die Printausgabe in Floor mache ich folgendes:</p>
<pre><code>ostream &amp; operator&lt;&lt; (std::ostream &amp;o,const Floor &amp; c)
{
	c.Print();
	return o;
}

void Floor::Print() const
{

	cout &lt;&lt; &quot;blabla&quot; &lt;&lt; mBlabla;
}
</code></pre>
<p>print im Haus:</p>
<pre><code>void House::Print() const
{
	copy(mFLoors.begin(),mFLoors.end(),ostream_iterator&lt;Floor&gt;(std::cout, &quot; &quot;));
}
</code></pre>
<p>Stöcke werden ins Haus so abgelegt:</p>
<pre><code>void House::AddFloor(Floor const &amp; flobj)
{
	mFLoors.push_back(flobj);
	mNrFloors++;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/321000/printausgabe-bei-aggregation</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 14:06:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321000.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Oct 2013 15:42:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 15:42:14 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Hab hier eine Klasse Haus mit einer Aggregation zur Klasse Stock.<br />
Haus benutzt Liste vom Typ Stock.<br />
Bei der Printausgabe (virtual) von der Klasse Haus aus verliere ich aus einem Grund die Werte vom Stock. Kann mir vllt irgendjemand da weiterhelfen?</p>
<p>Für die Printausgabe in Floor mache ich folgendes:</p>
<pre><code>ostream &amp; operator&lt;&lt; (std::ostream &amp;o,const Floor &amp; c)
{
	c.Print();
	return o;
}

void Floor::Print() const
{

	cout &lt;&lt; &quot;blabla&quot; &lt;&lt; mBlabla;
}
</code></pre>
<p>print im Haus:</p>
<pre><code>void House::Print() const
{
	copy(mFLoors.begin(),mFLoors.end(),ostream_iterator&lt;Floor&gt;(std::cout, &quot; &quot;));
}
</code></pre>
<p>Stöcke werden ins Haus so abgelegt:</p>
<pre><code>void House::AddFloor(Floor const &amp; flobj)
{
	mFLoors.push_back(flobj);
	mNrFloors++;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2361562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361562</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Sun, 20 Oct 2013 15:42:14 GMT</pubDate></item><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 15:57:38 GMT]]></title><description><![CDATA[<p>Bitte vollständiges Minimalbeispiel, dein Code reicht nicht aus, um deine Frage zu beantworten:<br />
<a href="http://www.c-plusplus.net/forum/304133" rel="nofollow">http://www.c-plusplus.net/forum/304133</a></p>
<p>Eine Anomalie in deinem Code ist übrigens dein Operator &lt;&lt;. Der Sinn davon ist ja gerade, dass man in den allgemeinen ostream (bei dir o) schreibt, nicht nach cout.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361564</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 20 Oct 2013 15:57:38 GMT</pubDate></item><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 16:23:09 GMT]]></title><description><![CDATA[<p>naja von der funktion her ändert sich nichts, aber schöner wärs auf jeden fall</p>
<p>also gut hier ist die basis aller basisklassen object</p>
<pre><code>class Object
{
public:
	// destructor must me declared as virtual because if we delete from an
	// object pointer a derived class the destructor must be called from
	// that class
	virtual ~Object();
	virtual void Print() const;
protected:
	// hide all default CTors per default so no Object class can be created
	Object();
private:
	//hide also the Copy-Ctor
	Object (const Object &amp; obj);
	//no assignment is allowed (also for inherit classes)
	Object&amp; operator =( Object const &amp; oSrc );
};
</code></pre>
<p>hier ist das header für das haus:</p>
<pre><code>//forward declaration
class Floor;

class House: public Object
{
public:
	House();
	virtual ~House();
	virtual void Print() const;
//andere Funktionen
	void AddFloor(Floor const &amp; flobj);

private:
	TAddress mAddress;
	TFloorList mFLoors;
	size_t mNrFloors;
};
</code></pre>
<p>ctor dtor (dotr noch nicht implementiert (also zurzeit leergelassen)</p>
<pre><code>House::House():mNrFloors(0)
{
}
</code></pre>
<p>klassendefinition stöcke</p>
<pre><code>class Floor: public Object
{
public:
	//paar Funktionen von der Aggregation einer weiteren Klasse die ich jetzt ausblende
	virtual void Print() const;
	Floor (const Floor &amp; cFloor);  //wenn ich das nicht definiere kriege ich einen fehler, wieso das ohne dem nicht geht, habe ich noch nicht verstanden
	Floor();
	virtual ~Floor();

private:
	size_t mNrFlat;

};
</code></pre>
<p>aufruf im main:</p>
<pre><code>Floor ws;
	ws.SetNrFlat(size_t(10));
	ws.GetNrFlat();
	House haus;
	haus.AddFloor(ws);

	haus.Print();
	//ws.Print(); das geht natürlich aber beim oberen bekomme ich den undefinierten zustand

	cout &lt;&lt;endl
</code></pre>
<p>ich hoffe soviel code reicht jetzt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361569</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Sun, 20 Oct 2013 16:23:09 GMT</pubDate></item><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 16:28:48 GMT]]></title><description><![CDATA[<p>Nein, das reicht nicht. Bitte <strong>vollständiges</strong> Minimalbeispiel. Dein Code wirft nur immer mehr Gegenfragen auf: Was ist TFloorList? Was ist der Sinn der Klasse Object?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361570</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 20 Oct 2013 16:28:48 GMT</pubDate></item><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 16:31:58 GMT]]></title><description><![CDATA[<p>Starke Vermutung: Der Fehler steckt in diesem Kommentar:</p>
<pre><code class="language-cpp">Floor (const Floor &amp; cFloor);  //wenn ich das nicht definiere kriege ich einen fehler, wieso das ohne dem nicht geht, habe ich noch nicht verstanden
</code></pre>
<p>Denn wenn du nicht weißt, wozu man einen Kopierkonstruktor brauchen kann, dann weißt du auch nicht, was man da reinschreibt. Insbesondere kopierst du dann nichts und verlierst scheinbar die &quot;Werte vom Stock&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361571</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sun, 20 Oct 2013 16:31:58 GMT</pubDate></item><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 17:31:30 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Starke Vermutung: Der Fehler steckt in diesem Kommentar:</p>
<pre><code class="language-cpp">Floor (const Floor &amp; cFloor);  //wenn ich das nicht definiere kriege ich einen fehler, wieso das ohne dem nicht geht, habe ich noch nicht verstanden
</code></pre>
<p>Denn wenn du nicht weißt, wozu man einen Kopierkonstruktor brauchen kann, dann weißt du auch nicht, was man da reinschreibt. Insbesondere kopierst du dann nichts und verlierst scheinbar die &quot;Werte vom Stock&quot;.</p>
</blockquote>
<p>wozu einen kopierkonstruktor benutzen?:<br />
um ein uninitialisiertes objekt mit einem schon initiliasierten objekt zu initiliasieren</p>
<p>aber wieso reicht bei meinem fall nicht der default copy-ctor?<br />
denn wenn ich die schnittstelle für den copy-ctor wieder ausblende bekomme ich folgendes:</p>
<pre><code>Error	1	error C2248: 'Object::Object' : cannot access private member declared in class 'Object'
</code></pre>
<p>habe es straightforward die eine Zeile im Stock-Copy-Ctor dazugeschrieben und es geht. Das was ich aber wirklich nicht weiß, ist:<br />
wieso reicht der default copy-ctor nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361581</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Sun, 20 Oct 2013 17:31:30 GMT</pubDate></item><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 17:39:17 GMT]]></title><description><![CDATA[<p>Du hast folgende Möglichkeiten, das herauszufinden:</p>
<ol>
<li>Bei der Fehlermeldung, die auftritt, wenn der Kopierkonstruktor von Floor nicht definiert ist, sagt dir der Compiler, an welcher Stelle er benötigt wird.</li>
<li>Du könntest dein Programm durchgehen und überlegen, wo wohl Objekte vom Typ Floor kopiert werden.</li>
<li>Du könntest im Kopierkonstruktor von Floor einen Breakpoint setzen.</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/2361586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361586</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sun, 20 Oct 2013 17:39:17 GMT</pubDate></item><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 17:40:27 GMT]]></title><description><![CDATA[<p>Weil dein Floor ein Object ist und ein Object ist bei dir nicht kopierbar. Die Frage ist immer noch: Wozu ist die Object-Klasse eigentlich gut?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361587</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 20 Oct 2013 17:40:27 GMT</pubDate></item><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 19:43:39 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Du hast folgende Möglichkeiten, das herauszufinden:</p>
<ol>
<li>Bei der Fehlermeldung, die auftritt, wenn der Kopierkonstruktor von Floor nicht definiert ist, sagt dir der Compiler, an welcher Stelle er benötigt wird.</li>
<li>Du könntest dein Programm durchgehen und überlegen, wo wohl Objekte vom Typ Floor kopiert werden.</li>
<li>Du könntest im Kopierkonstruktor von Floor einen Breakpoint setzen.</li>
</ol>
</blockquote>
<ol>
<li>fehler in der zeile 43 (ist jetzt nichtssagend, ohne irgendeine klasse im main zu benutzen) wo nur die zeichen }; stehen.<br />
2)hab jetzt genau den von dir vorhergesagten effekt gesehen<br />
3)siehe zwei</li>
</ol>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Weil dein Floor ein Object ist und ein Object ist bei dir nicht kopierbar. Die Frage ist immer noch: Wozu ist die Object-Klasse eigentlich gut?</p>
</blockquote>
<p>durch die eigene defintion des copy-ctors habe ich jetzt dieses effekt ausgehebelt?</p>
<p>also in der oop vorlesung haben wir gelernt, dass es gutes stil ist, wenn man von einer basis aller basisklassen (der nichts besonderes kann) andere klassen ableitet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361630</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Sun, 20 Oct 2013 19:43:39 GMT</pubDate></item><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 19:47:39 GMT]]></title><description><![CDATA[<p>ACnut schrieb:</p>
<blockquote>
<p>also in der oop vorlesung haben wir gelernt, dass es gutes stil ist, wenn man von einer basis aller basisklassen (der nichts besonderes kann) andere klassen ableitet</p>
</blockquote>
<p>1. Deine Basisklasse macht etwas. Nämlich verhindern, dass die entsprechenden Objekte kopiert werden können.<br />
2. Wenn sie nichts besonderes können, wozu soll das dann gut sein?<br />
3. Bist du wirklich sicher, dass du das richtig verstanden hast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361632</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 20 Oct 2013 19:47:39 GMT</pubDate></item><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 20:05:30 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>3. Bist du wirklich sicher, dass du das richtig verstanden hast?</p>
</blockquote>
<p>GoF: program to an interface, not an implementation</p>
<p>Das Gesetz Nummer 1 in Java. Immer erst ein Interface schreiben mit den Methoden und dann eine Klasse, die es implementiert. Quasi die Java-Version von Header-Dateien (lol).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361637</guid><dc:creator><![CDATA[java-checker]]></dc:creator><pubDate>Sun, 20 Oct 2013 20:05:30 GMT</pubDate></item><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 20:58:12 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>ACnut schrieb:</p>
<blockquote>
<p>also in der oop vorlesung haben wir gelernt, dass es gutes stil ist, wenn man von einer basis aller basisklassen (der nichts besonderes kann) andere klassen ableitet</p>
</blockquote>
<p>1. Deine Basisklasse macht etwas. Nämlich verhindern, dass die entsprechenden Objekte kopiert werden können.<br />
2. Wenn sie nichts besonderes können, wozu soll das dann gut sein?<br />
3. Bist du wirklich sicher, dass du das richtig verstanden hast?</p>
</blockquote>
<p>1)also werden auch die default copy-ctoren der abgeleiteten klassen auch verhindert, -&gt;sofern man diese selbst definiert (da bräuchte ich noch deine antwort)&lt;-<br />
2,3)hier haben wir eine ähnliche antwort wie der von java-checker gehört. ableitung von abstrakten klassen,uml-design...</p>
<p>bräuchte hier immer noch eine antwort:<br />
durch die eigene defintion des copy-ctors für Floor ist diese sperre zumindest für floor deaktiviert oder?</p>
<p>[quote=&quot;java-checker&quot;]</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Das Gesetz Nummer 1 in Java. Immer erst ein Interface schreiben mit den Methoden und dann eine Klasse, die es implementiert. Quasi die Java-Version von Header-Dateien (lol).</p>
</blockquote>
<p>ja genau sowas ähnliches hat er bei uns auch gesagt( vielleicht auch nur, weil er auch java unterrichtet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361662</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Sun, 20 Oct 2013 20:58:12 GMT</pubDate></item><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 21:02:44 GMT]]></title><description><![CDATA[<p>ACnut schrieb:</p>
<blockquote>
<p>1)also werden auch die default copy-ctoren der abgeleiteten klassen auch verhindert, -&gt;sofern man diese selbst definiert (da bräuchte ich noch deine antwort)&lt;-</p>
</blockquote>
<p>Nicht direkt, aber der compilergenerierte Copy-Ctor ruft automatisch den der Basisklasse auf, und das geht nicht, wenn der privat ist. Wenn du selbst einen definierst, und in der Initialisiererliste nicht den Basisklassen-Kopierkonstruktor aufrufst, dann nicht.</p>
<blockquote>
<p>2,3)hier haben wir eine ähnliche antwort wie der von java-checker gehört. ableitung von abstrakten klassen,uml-design...</p>
</blockquote>
<p>Das war ziemlich sicher Sarkasmus (und passt auch nicht ganz, Object ist ja kein Interface).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361663</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sun, 20 Oct 2013 21:02:44 GMT</pubDate></item><item><title><![CDATA[Reply to Printausgabe bei Aggregation on Sun, 20 Oct 2013 21:59:12 GMT]]></title><description><![CDATA[<p>1)also werden auch die default copy-ctoren der abgeleiteten klassen auch verhindert, -&gt;sofern man diese selbst definiert (da bräuchte ich noch deine antwort)&lt;-[/quote]<br />
Nicht direkt, aber der compilergenerierte Copy-Ctor ruft automatisch den der Basisklasse auf, und das geht nicht, wenn der privat ist. Wenn du selbst einen definierst, und in der Initialisiererliste nicht den Basisklassen-Kopierkonstruktor aufrufst, dann nicht.</p>
<p>hmmm ok, danke <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>
<blockquote>
<p>2,3)hier haben wir eine ähnliche antwort wie der von java-checker gehört. ableitung von abstrakten klassen,uml-design...</p>
</blockquote>
<p>Das war ziemlich sicher Sarkasmus (und passt auch nicht ganz, Object ist ja kein Interface).[/quote]</p>
<p>also jetzt bin ich ziemlich verunsichert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
ich glaub ich werde den lehrer nochmal fragen</p>
<p>danke für die hilfe</p>
<p>mfg<br />
ACnut</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361692</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Sun, 20 Oct 2013 21:59:12 GMT</pubDate></item></channel></rss>