<?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;lt;&amp;lt; Operator überladen]]></title><description><![CDATA[<p>Guten Morgen liebe Gemeinde,<br />
ich würde gerne den &lt;&lt; Operator in einer Klasse überladen, so dass ich den Operator mehrfach in einer Zeile verwenden kann. Die Operatoren sind immer Objekte der Klasse.<br />
Die Aufgabenstellung:</p>
<p>Aufgabe:<br />
Die Klasse firma aus Aufgabe 1 soll nun so erweitert werden, dass sich zwei Firmen nicht nur mit Hilfe des Operators + zusammenschliessen können, sondern dass eine Firma mehrere andere Firmen übernehmen kann. Überladen Sie hierzu den Operator &lt;&lt; derart, dass Sie die Übernahme mehrerer Firmen in einer einzigen Code-Zeile angeben können. Übernommene Firmen sollen innerhalb der Klasse firma in einem Array mit zehn Feldern vom Typ std::string gespeichert werden.</p>
<p>TIPP für die Aufgabenstellung:<br />
Sie müssen nun den Operator &lt;&lt; für die Klasse firma überladen. Nachdem eine Firma eine andere Firma übernehmen soll und somit beide Operanden wieder Objekte vom Typ firma sind, können Sie auch in diesem Fall den Operator als Methode überladen. Hierbei ist nun wichtig, dass der überladene Operator als Rückgabewert den jeweils ersten Operanden als Referenz liefert - andernfalls ist es nicht möglich, innerhalb einer Zeile mehrere Objekte vom Typ firma mit &lt;&lt; zu verknüpfen.</p>
<p>Ich komme leider nicht weiter, weil ich mir nicht sicher bin, wie ich den ersten Operanten zurückgeben kann.</p>
<p>Meine Lösung</p>
<p>firma.h</p>
<pre><code>#pragma once
#include &lt;string&gt;
#include &lt;iostream&gt;

class firma
{
public:
	firma(std::string name);
	~firma(void);
	void operator+(firma &amp;f);
	firma operator&lt;&lt;(firma &amp;f);
	void name(); 
	void show();
private:
	std::string Name;
	std::string Firmen[10]; 

};
</code></pre>
<p>firma.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;firma.h&quot;

firma::firma(std::string name) : Name(name)
{
}

firma::~firma(void)
{
}

void firma::operator+(firma &amp;f)
{
	Name += &quot;&amp;&quot; + f.Name;
	f.Name = Name;
}

firma firma::operator&lt;&lt;(firma &amp;f)
{
	int i;
	for(i=0;i&lt;10;i++)
	{
		if(Firmen[i] == &quot;&quot;)
		{
			Firmen[i]=f.Name;
			break;
		}
	}
	return firma;  
}

void firma::name()
{
	std::cout &lt;&lt; Name &lt;&lt; std::endl;
}
void firma::show()
{
	int i;
	for(i=0;i&lt;10;i++)
	{
		std::cout &lt;&lt; Firmen[i] &lt;&lt; std::endl;
	}
}
</code></pre>
<p>In der main würde ich dann gerne 3 Objekte erstellen und mit a&lt;&lt;b&lt;&lt;c; die einzelnen Firmen zusammenbringen.</p>
<p>Ih hoffe Ihr könnt mir helfen.</p>
<p>MFG<br />
aendue</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/317700/lt-lt-operator-überladen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 15:27:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317700.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 18 Jun 2013 06:35:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;lt;&amp;lt; Operator überladen on Tue, 18 Jun 2013 06:35:59 GMT]]></title><description><![CDATA[<p>Guten Morgen liebe Gemeinde,<br />
ich würde gerne den &lt;&lt; Operator in einer Klasse überladen, so dass ich den Operator mehrfach in einer Zeile verwenden kann. Die Operatoren sind immer Objekte der Klasse.<br />
Die Aufgabenstellung:</p>
<p>Aufgabe:<br />
Die Klasse firma aus Aufgabe 1 soll nun so erweitert werden, dass sich zwei Firmen nicht nur mit Hilfe des Operators + zusammenschliessen können, sondern dass eine Firma mehrere andere Firmen übernehmen kann. Überladen Sie hierzu den Operator &lt;&lt; derart, dass Sie die Übernahme mehrerer Firmen in einer einzigen Code-Zeile angeben können. Übernommene Firmen sollen innerhalb der Klasse firma in einem Array mit zehn Feldern vom Typ std::string gespeichert werden.</p>
<p>TIPP für die Aufgabenstellung:<br />
Sie müssen nun den Operator &lt;&lt; für die Klasse firma überladen. Nachdem eine Firma eine andere Firma übernehmen soll und somit beide Operanden wieder Objekte vom Typ firma sind, können Sie auch in diesem Fall den Operator als Methode überladen. Hierbei ist nun wichtig, dass der überladene Operator als Rückgabewert den jeweils ersten Operanden als Referenz liefert - andernfalls ist es nicht möglich, innerhalb einer Zeile mehrere Objekte vom Typ firma mit &lt;&lt; zu verknüpfen.</p>
<p>Ich komme leider nicht weiter, weil ich mir nicht sicher bin, wie ich den ersten Operanten zurückgeben kann.</p>
<p>Meine Lösung</p>
<p>firma.h</p>
<pre><code>#pragma once
#include &lt;string&gt;
#include &lt;iostream&gt;

class firma
{
public:
	firma(std::string name);
	~firma(void);
	void operator+(firma &amp;f);
	firma operator&lt;&lt;(firma &amp;f);
	void name(); 
	void show();
private:
	std::string Name;
	std::string Firmen[10]; 

};
</code></pre>
<p>firma.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;firma.h&quot;

firma::firma(std::string name) : Name(name)
{
}

firma::~firma(void)
{
}

void firma::operator+(firma &amp;f)
{
	Name += &quot;&amp;&quot; + f.Name;
	f.Name = Name;
}

firma firma::operator&lt;&lt;(firma &amp;f)
{
	int i;
	for(i=0;i&lt;10;i++)
	{
		if(Firmen[i] == &quot;&quot;)
		{
			Firmen[i]=f.Name;
			break;
		}
	}
	return firma;  
}

void firma::name()
{
	std::cout &lt;&lt; Name &lt;&lt; std::endl;
}
void firma::show()
{
	int i;
	for(i=0;i&lt;10;i++)
	{
		std::cout &lt;&lt; Firmen[i] &lt;&lt; std::endl;
	}
}
</code></pre>
<p>In der main würde ich dann gerne 3 Objekte erstellen und mit a&lt;&lt;b&lt;&lt;c; die einzelnen Firmen zusammenbringen.</p>
<p>Ih hoffe Ihr könnt mir helfen.</p>
<p>MFG<br />
aendue</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332004</guid><dc:creator><![CDATA[aendue]]></dc:creator><pubDate>Tue, 18 Jun 2013 06:35:59 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;&amp;lt; Operator überladen on Tue, 18 Jun 2013 06:37:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Lies doch einfach mal den Artikel zu Operatorüberladung im Magazin, Abschnitt 3.4<br />
<a href="http://www.c-plusplus.net/forum/232010" rel="nofollow">http://www.c-plusplus.net/forum/232010</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332005</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 18 Jun 2013 06:37:13 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;&amp;lt; Operator überladen on Tue, 18 Jun 2013 06:57:08 GMT]]></title><description><![CDATA[<p>Ja hab ich auch schon gefunden, hat mich aber bis jetzt nicht weitergebracht.</p>
<p>Da steht auch nicht die Implementierung in einer Klasse.</p>
<p>Da steht:<br />
&quot;Da der linke Operand das Streamobjekt ist und die Klassen der Standardbibliothek nicht nachträglich erweitert werden können, müssen die Streaming-Operatoren als freie Funktionen definiert werden.<br />
Übliche Implementierung: &quot;</p>
<p>Aber das stht doch im wiederspruch zum den Tipp:</p>
<p>&quot;Nachdem eine Firma eine andere Firma übernehmen soll und somit beide Operanden wieder Objekte vom Typ firma sind, können Sie auch in diesem Fall den Operator als Methode überladen.&quot;</p>
<p>Das ist grad das was mich verwirrt...Geht das nur als freie Funktion, oder kann ich das auch in der Klasse implementieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332006</guid><dc:creator><![CDATA[aendue]]></dc:creator><pubDate>Tue, 18 Jun 2013 06:57:08 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;&amp;lt; Operator überladen on Tue, 18 Jun 2013 06:55:48 GMT]]></title><description><![CDATA[<pre><code>return firma;
</code></pre>
<p>Du musst dich nochmal mit den Grundlagen in C++ auseinandersetzen. <code>firma</code> ist eine Klasse, Funktionen können nur Objekte und Referenzen zurückgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332009</guid><dc:creator><![CDATA[sone_logoff]]></dc:creator><pubDate>Tue, 18 Jun 2013 06:55:48 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;&amp;lt; Operator überladen on Tue, 18 Jun 2013 06:57:45 GMT]]></title><description><![CDATA[<p>Warum willst du den Operator in der Klasse haben? Der Operator sollte nie Member der Klasse sein. Wenn du ihn unbedingt in der Klasse implementieren willst mach ihn zum friend.<br />
siehe auch<br />
<a href="http://stackoverflow.com/questions/476272/how-to-properly-overload-the-operator-for-an-ostream" rel="nofollow">http://stackoverflow.com/questions/476272/how-to-properly-overload-the-operator-for-an-ostream</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332010</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 18 Jun 2013 06:57:45 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;&amp;lt; Operator überladen on Tue, 18 Jun 2013 06:59:04 GMT]]></title><description><![CDATA[<p>Im Tipp steh ja:<br />
&quot;dass der überladene Operator als Rückgabewert den jeweils ersten Operanden als Referenz liefert&quot;</p>
<p>Und das ist ja auch die Stelle, wo ich nicht weiter komm....Wie geb ich den ersten Operanten zurück?</p>
<p>return &amp;firma ist es auch nicht....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332014</guid><dc:creator><![CDATA[aendue]]></dc:creator><pubDate>Tue, 18 Jun 2013 06:59:04 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;&amp;lt; Operator überladen on Tue, 18 Jun 2013 07:01:17 GMT]]></title><description><![CDATA[<p>Der erste Operand ist der Stream. Den gibst du als Referenz zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332016</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 18 Jun 2013 07:01:17 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;&amp;lt; Operator überladen on Tue, 18 Jun 2013 07:17:03 GMT]]></title><description><![CDATA[<p>aendue schrieb:</p>
<blockquote>
<p>Im Tipp steh ja:<br />
&quot;dass der überladene Operator als Rückgabewert den jeweils ersten Operanden als Referenz liefert&quot;</p>
<p>Und das ist ja auch die Stelle, wo ich nicht weiter komm....Wie geb ich den ersten Operanten zurück?</p>
<p>return &amp;firma ist es auch nicht....</p>
</blockquote>
<p>Was ist denn der erste Operand?<br />
Schreibst du:</p>
<pre><code>firma a, b;
a &lt;&lt; b;
</code></pre>
<p>Ist das in deinem Fall das gleiche wie:</p>
<pre><code>firma a, b;
a.operator&lt;&lt;(b);
</code></pre>
<p>Der erste Operand ist a - also das aktuelle Objekt.<br />
Und wie kommt man an das erste Objekt? Richtig mit this.<br />
Du schreibst also:</p>
<pre><code>firma&amp; operator &lt;&lt; (firma &amp;f) // muss via Referenz zurückgegebenwerden, weil sonst bei Verkettung nicht richtig funktioniert
{
    ...
    return *this;
}
</code></pre>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a>:<br />
Es geht hier nicht um den Outputoperator.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332018</guid><dc:creator><![CDATA[Nathan_logoff]]></dc:creator><pubDate>Tue, 18 Jun 2013 07:17:03 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;&amp;lt; Operator überladen on Tue, 18 Jun 2013 07:17:34 GMT]]></title><description><![CDATA[<p>Meine neue Lösung:</p>
<p>firma.h</p>
<pre><code>#pragma once
#include &lt;string&gt;
#include &lt;iostream&gt;

class firma
{
public:
	firma(std::string name);
	~firma(void);
	void operator+(firma &amp;f);
	friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; op, firma&amp; f);
	void name(); 
	void show();
private:
	std::string Name;
	std::string Firmen[10]; 

};
</code></pre>
<p>firma.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;firma.h&quot;

firma::firma(std::string name) : Name(name)
{
}

firma::~firma(void)
{
}

void firma::operator+(firma &amp;f)
{
	Name += &quot;&amp;&quot; + f.Name;
	f.Name = Name;
}

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; op, firma&amp; f)
{
	???

	return op;
}

void firma::name()
{
	std::cout &lt;&lt; Name &lt;&lt; std::endl;
}
void firma::show()
{
	int i;
	for(i=0;i&lt;10;i++)
	{
		std::cout &lt;&lt; Firmen[i] &lt;&lt; std::endl;
	}
}
</code></pre>
<p>Ich hab das jetzt mal so implementiert, aber jetzt kann ich mir grad schlecht vorstellen, was in dem ostream &quot;drin streckt&quot;.<br />
Also ich weiß jetzt ehrlich nicht genau, wie ich jetzt das Array füllen kann.</p>
<p>Wenn ich jetzt in der main funktion a&lt;&lt;b&lt;&lt;c; eingebe, dann merkert er, weil der Operator nicht mit den Operaten überin stimmt.</p>
<p>Ich verzweifle noch... <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332019</guid><dc:creator><![CDATA[aendue]]></dc:creator><pubDate>Tue, 18 Jun 2013 07:17:34 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;&amp;lt; Operator überladen on Tue, 18 Jun 2013 07:23:15 GMT]]></title><description><![CDATA[<p>Das was du jetzt gemacht hast, ist der Output Operator, mit dem du Sachen auf cout ausgeben kannst. Den brauchst du in diesem Fall nicht.</p>
<p>Schau dir nochmal meinen Post an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332020</guid><dc:creator><![CDATA[Nathan_logoff]]></dc:creator><pubDate>Tue, 18 Jun 2013 07:23:15 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;&amp;lt; Operator überladen on Tue, 18 Jun 2013 07:34:19 GMT]]></title><description><![CDATA[<p>@Nathan_logoff<br />
Danke für deine Hilfe, das hat mich zum Ziel gebracht. Es wird quasi nicht der output operator überladen, sondern der &lt;&lt; Operator der Klasse Firma...Kann man das so sagen?</p>
<p>Jetzt fünktioniert es!!!</p>
<p>Lösung:</p>
<p>firma.h</p>
<pre><code>#pragma once
#include &lt;string&gt;
#include &lt;iostream&gt;

class firma
{
public:
	firma(std::string name);
	~firma(void);
	void operator+(firma &amp;f);
	firma&amp; operator&lt;&lt;(firma &amp;f);
	void name(); 
	void show();
private:
	std::string Name;
	std::string Firmen[10]; 

};
</code></pre>
<p>firma.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;firma.h&quot;

firma::firma(std::string name) : Name(name)
{
}

firma::~firma(void)
{
}

void firma::operator+(firma &amp;f)
{
	Name += &quot;&amp;&quot; + f.Name;
	f.Name = Name;
}

firma&amp; firma::operator&lt;&lt;(firma &amp;f)
{
	int i;
	for(i=0;i&lt;10;i++)
	{
		if(Firmen[i] == &quot;&quot;)
		{
		Firmen[i]=f.Name;
		break;
		}
	}
	return *this;
}

void firma::name()
{
	std::cout &lt;&lt; Name &lt;&lt; std::endl;
}
void firma::show()
{
	int i;
	for(i=0;i&lt;10;i++)
	{
		std::cout &lt;&lt; Firmen[i] &lt;&lt; std::endl;
	}
}
</code></pre>
<pre><code>#include &lt;iostream&gt;
#include &quot;firma.h&quot;

void main()
{
	firma d(&quot;Dell&quot;);
	firma i(&quot;IBM&quot;);
	firma g(&quot;golem&quot;);
	firma n(&quot;net&quot;);

	d&lt;&lt;i&lt;&lt;g&lt;&lt;n;

	d.show();

}
</code></pre>
<p>Vielen Dank nochmals!!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332025</guid><dc:creator><![CDATA[aendue]]></dc:creator><pubDate>Tue, 18 Jun 2013 07:34:19 GMT</pubDate></item></channel></rss>