<?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[I&#x2F;O operatoren überladen]]></title><description><![CDATA[<p>hi, ich hab nen problem bei dem überladen des ausgabe operators<br />
und zwar hab ich ne main Klasse darin mach ich einen neuen Zoo &quot;emmen&quot; und da soll ich dann cout &lt;&lt; *emmen machen und da soll er mir alle mitarbeiter aus dem zoo ausgeben. ich hab weiterhin ne klasse zoo, ne klasse arbeitnehmer worin 2 virtuelle methoden sind einmal die &quot;ausgeben&quot; um die informationen von dem arbeitnehmer auszugeben und die &quot;gibGehalt&quot;. Weiterhin erben 3 Klassen von dieser. Manager, aufpasser, Admin.</p>
<p>wenn ich jetz in der klasse arbeitnehmer</p>
<pre><code class="language-cpp">ostream &amp; operator &lt;&lt; (ostream &amp; os, Arbeitnehmer &amp; a){
	os &lt;&lt; a.ausgabe();
	return os;
}
</code></pre>
<p>mach, funktioniert das nicht, er sagt mir was von void das das nicht geht. Weil wenn ich die methode a.gibGehalt() aufrufe funktioniert alles ohne probleme, weiterhin is das problem das wenn ich dieses in der Klasse ARbeitnehmer mach, kann ich ja nicht aus der Main cout&lt;&lt;*emmen anrufen, da müsst ich dann inder Zoo klasse auch noch so ne ähnliche funktion machen mit dem überladenen ausgabeoperator.<br />
ich blicks einfach net... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>pls help</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/176587/i-o-operatoren-überladen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 13:44:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176587.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Mar 2007 15:44:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to I&#x2F;O operatoren überladen on Thu, 22 Mar 2007 15:44:32 GMT]]></title><description><![CDATA[<p>hi, ich hab nen problem bei dem überladen des ausgabe operators<br />
und zwar hab ich ne main Klasse darin mach ich einen neuen Zoo &quot;emmen&quot; und da soll ich dann cout &lt;&lt; *emmen machen und da soll er mir alle mitarbeiter aus dem zoo ausgeben. ich hab weiterhin ne klasse zoo, ne klasse arbeitnehmer worin 2 virtuelle methoden sind einmal die &quot;ausgeben&quot; um die informationen von dem arbeitnehmer auszugeben und die &quot;gibGehalt&quot;. Weiterhin erben 3 Klassen von dieser. Manager, aufpasser, Admin.</p>
<p>wenn ich jetz in der klasse arbeitnehmer</p>
<pre><code class="language-cpp">ostream &amp; operator &lt;&lt; (ostream &amp; os, Arbeitnehmer &amp; a){
	os &lt;&lt; a.ausgabe();
	return os;
}
</code></pre>
<p>mach, funktioniert das nicht, er sagt mir was von void das das nicht geht. Weil wenn ich die methode a.gibGehalt() aufrufe funktioniert alles ohne probleme, weiterhin is das problem das wenn ich dieses in der Klasse ARbeitnehmer mach, kann ich ja nicht aus der Main cout&lt;&lt;*emmen anrufen, da müsst ich dann inder Zoo klasse auch noch so ne ähnliche funktion machen mit dem überladenen ausgabeoperator.<br />
ich blicks einfach net... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>pls help</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250601</guid><dc:creator><![CDATA[MiMi85]]></dc:creator><pubDate>Thu, 22 Mar 2007 15:44:32 GMT</pubDate></item><item><title><![CDATA[Reply to I&#x2F;O operatoren überladen on Thu, 22 Mar 2007 16:12:58 GMT]]></title><description><![CDATA[<p>MiMi85 schrieb:</p>
<blockquote>
<p>hi, ich hab nen problem bei dem überladen des ausgabe operators<br />
und zwar hab ich ne main Klasse darin mach ich einen neuen Zoo &quot;emmen&quot; und da soll ich dann cout &lt;&lt; *emmen machen und da soll er mir alle mitarbeiter aus dem zoo ausgeben. ich hab weiterhin ne klasse zoo, ne klasse arbeitnehmer worin 2 virtuelle methoden sind einmal die &quot;ausgeben&quot; um die informationen von dem arbeitnehmer auszugeben und die &quot;gibGehalt&quot;. Weiterhin erben 3 Klassen von dieser. Manager, aufpasser, Admin.</p>
<p>wenn ich jetz in der klasse arbeitnehmer</p>
<pre><code class="language-cpp">ostream &amp; operator &lt;&lt; (ostream &amp; os, Arbeitnehmer &amp; a){
	os &lt;&lt; a.ausgabe();
	return os;
}
</code></pre>
<p>mach, funktioniert das nicht, er sagt mir was von void das das nicht geht. Weil wenn ich die methode a.gibGehalt() aufrufe funktioniert alles ohne probleme, weiterhin is das problem das wenn ich dieses in der Klasse ARbeitnehmer mach, kann ich ja nicht aus der Main cout&lt;&lt;*emmen anrufen, da müsst ich dann inder Zoo klasse auch noch so ne ähnliche funktion machen mit dem überladenen ausgabeoperator.<br />
ich blicks einfach net... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>pls help</p>
</blockquote>
<p>Wetten, dass Arbeitnehmer::ausgabe() ein void zurückgibt ?<br />
... und ein void kann man nunmal nicht per &quot;&lt;&lt;&quot; ausgeben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Ich glaube, Du mischst hier zwei verschiedene Konzepte, eigene Datentypen anzuzeigen:<br />
Konzept A: Verpasse Deiner Klasse eine ausgabe()-Funktion (oder &quot;show()&quot; oder ...). Diese wird von Nutzer aufgerufen und fertig.</p>
<p>Konzept B: Nutzer die Ausgabeoperatoren der Streams. Diese werden vom Nutzer verkettet wie</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;Dies ist ein CString&quot; &lt;&lt; i &lt;&lt; &quot; &quot; &lt;&lt; a &lt;&lt; &quot;\n&quot;;
</code></pre>
<p>Ich persönlich bin ein Fan des Konzepts B und Du hast Dich ja schon auf den Weg dahin gemacht - aber leider nur halb.<br />
Wahrscheinlich brauchst Du den Rumpf Deiner Ausgabe-Funktion in den operator&lt;&lt;() zu kopieren (und statt cout -&gt; out verwenden).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250625</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 22 Mar 2007 16:12:58 GMT</pubDate></item><item><title><![CDATA[Reply to I&#x2F;O operatoren überladen on Thu, 22 Mar 2007 16:12:31 GMT]]></title><description><![CDATA[<p>mhm ja.. da hast du wohl recht. also muss ich jetzt wohl alle ausgabe() in string umändern, wenn ich das richtig seh. mal probiern..</p>
<p>muss ich die methode</p>
<pre><code class="language-cpp">ostream &amp; operator &lt;&lt; (ostream &amp; os, Arbeitnehmer &amp; a)
</code></pre>
<p>in jeder abgeleiteten klases vom arbeitnehmer einfügen oder nur in Arbeitnehmer selbst? und wie komm ich da von der main ran, weil in der klasse Zoo müsst ich ja dann auch noch was in der richtung haben, so das auch alle arbeitnehmer ausgegeben werden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250631</guid><dc:creator><![CDATA[MiMi85]]></dc:creator><pubDate>Thu, 22 Mar 2007 16:12:31 GMT</pubDate></item><item><title><![CDATA[Reply to I&#x2F;O operatoren überladen on Thu, 22 Mar 2007 16:20:45 GMT]]></title><description><![CDATA[<p>MiMi85 schrieb:</p>
<blockquote>
<p>mhm ja.. da hast du wohl recht. also muss ich jetzt wohl alle ausgabe() in string umändern, wenn ich das richtig seh. mal probiern.....</p>
</blockquote>
<p>Hast Du denn mehrere ausgabe()-Funktionen in einer Klasse (overloading) ? Dann dürftest Du ein Problem haben, weil Du dem operator&lt;&lt;() ja nicht mitgeben kannst, welche er verwenden soll....<br />
(Vermutlich meinst Du aber jeweils eine Ausgabefunktion in unterschiedlichen Klassen, oder ?)</p>
<p>Ich würde nicht in strings packen, also den operator&lt;&lt;() die ausgabe() nutzen lassen, sondern andersherum:</p>
<pre><code class="language-cpp">// forward-deklarationen
class Arbeitnehmer;
ostream&amp; operator&lt;&lt;(ostream&amp; out, Arbeitnehmer const&amp; a);

class Arbeitnehmer {
   string name;
public:
   void ausgabe() const { cout &lt;&lt; *this &lt;&lt; &quot;\n&quot;; }
   string const&amp; getName() const { return name; } // Alternativ: operator&lt;&lt;() als friend deklarieren
...
}

ostream&amp; operator&lt;&lt;(ostream&amp; out, Arbeitnehmer const&amp; a) {
   return out &lt;&lt; a.name;
}
</code></pre>
<p>Vorteil: Mit ostreams kannst Du mehr machen (via ostringstream aufpolieren, in ofstreams wegschreiben, ....) u.a. auch strings draus machen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250636</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 22 Mar 2007 16:20:45 GMT</pubDate></item><item><title><![CDATA[Reply to I&#x2F;O operatoren überladen on Thu, 22 Mar 2007 16:33:21 GMT]]></title><description><![CDATA[<p>mhm.. versteh ich nicht. <a href="http://a.name" rel="nofollow">a.name</a> ist ja auch nen string, das kann ja nur funktioniern ^^ und den als friend gemacht hab ich schon.</p>
<p>in der klasse Arbeitnehmer.h hab ich jetzt</p>
<pre><code class="language-cpp">class Arbeitnehmer {
	friend ostream &amp; operator &lt;&lt; (ostream&amp;, Arbeitnehmer &amp;);
</code></pre>
<p>in der klases <a href="http://Arbeitnehmer.cc" rel="nofollow">Arbeitnehmer.cc</a> hab ich jetzt</p>
<pre><code class="language-cpp">ostream &amp; operator &lt;&lt; (ostream &amp; os, Arbeitnehmer&amp; w){
	os &lt;&lt; w.ausgabe();
	return os;
}
</code></pre>
<p>nur das geht nicht da ja die ausgabe funktion so aussieht</p>
<pre><code class="language-cpp">string Admin::ausgabe(){
	//Arbeitnehmer::drukaf();
	cout &lt;&lt; &quot;\t Gehalt(Admin1000+&quot;&lt;&lt;alter()&lt;&lt;&quot;*500): &quot;&lt;&lt; gibGehalt() &lt;&lt;endl;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1250642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250642</guid><dc:creator><![CDATA[MiMi85]]></dc:creator><pubDate>Thu, 22 Mar 2007 16:33:21 GMT</pubDate></item><item><title><![CDATA[Reply to I&#x2F;O operatoren überladen on Thu, 22 Mar 2007 16:44:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">ostream &amp; operator &lt;&lt; (ostream &amp; os, const Arbeitnehmer&amp; w){
    os &lt;&lt; &quot;Gehalt(Admin1000+&quot;&lt;&lt;alter()&lt;&lt;&quot;*500): &quot;&lt;&lt; gibGehalt();
    return os;
}
</code></pre>
<p>.. und wirf die Methode 'ausgabe()' weg.</p>
<p>und wenn Du es ausgeben willst, dann schreibe:</p>
<pre><code class="language-cpp">Arbeitnehmer a;
    cout &lt;&lt; a &lt;&lt; endl;
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250651</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 22 Mar 2007 16:44:53 GMT</pubDate></item><item><title><![CDATA[Reply to I&#x2F;O operatoren überladen on Thu, 22 Mar 2007 16:49:00 GMT]]></title><description><![CDATA[<p>naja im aufgabenbuch steht wir sollen das überladen des ausgabeoperators mit hilfe der ausgabefunktion machen. darum häng ich mich daran so fest...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250658</guid><dc:creator><![CDATA[MiMi85]]></dc:creator><pubDate>Thu, 22 Mar 2007 16:49:00 GMT</pubDate></item><item><title><![CDATA[Reply to I&#x2F;O operatoren überladen on Thu, 22 Mar 2007 16:59:45 GMT]]></title><description><![CDATA[<p>MiMi85 schrieb:</p>
<blockquote>
<p>naja im aufgabenbuch steht wir sollen das überladen des ausgabeoperators mit hilfe der ausgabefunktion machen. darum häng ich mich daran so fest...</p>
</blockquote>
<p>OK,</p>
<p>klingt nach einer weiteren &quot;sinnlos-weil-macht-man-in-der-Praxis-besser-anders-Aufgabe&quot; <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="😉"
    /><br />
Dann ist das mit dem String (bzw. ostringstream) schon nicht schlecht.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250663</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 22 Mar 2007 16:59:45 GMT</pubDate></item><item><title><![CDATA[Reply to I&#x2F;O operatoren überladen on Thu, 22 Mar 2007 17:21:50 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>klingt nach einer weiteren &quot;sinnlos-weil-macht-man-in-der-Praxis-besser-anders-Aufgabe&quot; <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="😉"
    /><br />
Dann ist das mit dem String (bzw. ostringstream) schon nicht schlecht.</p>
</blockquote>
<p>Huh? Wie sieht denn die Alternative aus der Praxis aus?</p>
<pre><code class="language-cpp">struct Arbeitnehmer {
  virtual void ausgabe( std::ostream&amp; out ) const = 0;
};

std::ostream&amp; operator&lt;&lt;( std::ostream&amp; out, Arbeitnehmer const&amp; obj ) {
  obj.ausgabe(out);
  return out;
}

struct Manager : Arbeitnehmer {
  virtual void ausgabe( std::ostream&amp; out ) const {
    out &lt;&lt; &quot;Manager!&quot;;
  }
};

struct Admin : Arbeitnehmer {
  virtual void ausgabe( std::ostream&amp; out ) const {
    out &lt;&lt; &quot;Admin!&quot;;
  }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1250681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250681</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Thu, 22 Mar 2007 17:21:50 GMT</pubDate></item><item><title><![CDATA[Reply to I&#x2F;O operatoren überladen on Thu, 22 Mar 2007 17:34:25 GMT]]></title><description><![CDATA[<p>ok 2 fragen..<br />
1. warum macht ihr immer überall nen const hin?<br />
2. wofür steht das struct</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250689</guid><dc:creator><![CDATA[MiMi85]]></dc:creator><pubDate>Thu, 22 Mar 2007 17:34:25 GMT</pubDate></item><item><title><![CDATA[Reply to I&#x2F;O operatoren überladen on Thu, 22 Mar 2007 17:46:56 GMT]]></title><description><![CDATA[<p>MiMi85 schrieb:</p>
<blockquote>
<p>1. warum macht ihr immer überall nen const hin?</p>
</blockquote>
<p>Wegen der const-correctness! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
(const bei Variablen/Parametern heisst dass diese nicht verändert werden können, bei Methoden dass sie das Objekt nicht ändert.)</p>
<p>MiMi85 schrieb:</p>
<blockquote>
<p>2. wofür steht das struct</p>
</blockquote>
<p>Im Prinzip das Gleiche wie class, bloß dass alles per default public statt private ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250700</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Thu, 22 Mar 2007 17:46:56 GMT</pubDate></item><item><title><![CDATA[Reply to I&#x2F;O operatoren überladen on Thu, 22 Mar 2007 20:40:48 GMT]]></title><description><![CDATA[<p>Hi finix,</p>
<p>OK, ich hatte einerseits nur an die &quot;Stringisierung&quot; (sprich: erst alles in ausgabe() in einen String verwandeln und den dann im operator&lt;&lt; verwenden) und dafür nicht an Polymorphie gedacht.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250834</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 22 Mar 2007 20:40:48 GMT</pubDate></item><item><title><![CDATA[Reply to I&#x2F;O operatoren überladen on Thu, 22 Mar 2007 20:42:45 GMT]]></title><description><![CDATA[<p>MiMi85 schrieb:</p>
<blockquote>
<p>...<br />
1. warum macht ihr immer überall nen const hin?<br />
...</p>
</blockquote>
<p>Es ist sicherer (und deswegen &quot;guter Stil&quot;), dem Compiler möglichst viel an die Hand zu geben, damit er helfen kann .... und letztlich schießt man sich mit zu wenig const ins Knie - spätestens, wenn man denn doch mal ein Konstantes Objekt in die Finger bekommt, es aber leider nicht verwenden kann.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250837</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 22 Mar 2007 20:42:45 GMT</pubDate></item></channel></rss>