<?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[Klasse für Ausgabe ableiten ?]]></title><description><![CDATA[<p>Tach!</p>
<p>Ich programmiere einen µC in C++, Ausgaben auf der Konsole werden wie üblich mit cout gehandhabt. Zusätzlich habe ich noch ein LC-Display angeschlossen. Nun würde ich mir gerne eine Klasse deklarieren (olcdstream), und davon ein Objekt bilden (lcdout), so dass ich z.B. mit</p>
<p>lcdout &lt;&lt; &quot;Hallo&quot; &lt;&lt; i &lt;&lt; endl;</p>
<p>auf dem Display schreiben kann.</p>
<p>Das müsste doch eigentlich relativ einfach möglich sein, indem ich in meiner Klasse die Methode (welche?) überschreibe welche für die eigentliche Ausgabe verantwortlich ist. Allerdings blicke ich in dem Jungel aus ios, ostream, streambase, etc. überhaupt noch nicht durch.</p>
<p>Hätte da jemand einen Tip für mich ?</p>
<p>Grüße<br />
Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/149054/klasse-für-ausgabe-ableiten</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 04:33:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/149054.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 01 Jun 2006 21:04:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse für Ausgabe ableiten ? on Thu, 01 Jun 2006 21:04:31 GMT]]></title><description><![CDATA[<p>Tach!</p>
<p>Ich programmiere einen µC in C++, Ausgaben auf der Konsole werden wie üblich mit cout gehandhabt. Zusätzlich habe ich noch ein LC-Display angeschlossen. Nun würde ich mir gerne eine Klasse deklarieren (olcdstream), und davon ein Objekt bilden (lcdout), so dass ich z.B. mit</p>
<p>lcdout &lt;&lt; &quot;Hallo&quot; &lt;&lt; i &lt;&lt; endl;</p>
<p>auf dem Display schreiben kann.</p>
<p>Das müsste doch eigentlich relativ einfach möglich sein, indem ich in meiner Klasse die Methode (welche?) überschreibe welche für die eigentliche Ausgabe verantwortlich ist. Allerdings blicke ich in dem Jungel aus ios, ostream, streambase, etc. überhaupt noch nicht durch.</p>
<p>Hätte da jemand einen Tip für mich ?</p>
<p>Grüße<br />
Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1069804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1069804</guid><dc:creator><![CDATA[Phunkafizer]]></dc:creator><pubDate>Thu, 01 Jun 2006 21:04:31 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für Ausgabe ableiten ? on Fri, 02 Jun 2006 04:59:28 GMT]]></title><description><![CDATA[<pre><code>ostream &amp;  operator&lt;&lt; (ostream &amp;stream, const DeineKlasse &amp; d){
    stream&lt;&lt;d.DeineWerte1&lt;&lt;&quot; &quot;;
    stream&lt;&lt; td.DeineWere2&lt;&lt;&quot; &quot;;
    return stream;
}
</code></pre>
<p>global definieren und mit deiner klasse befreunden.</p>
<pre><code>class DeineKlasse{

//....
   friend ostream &amp;  operator&lt;&lt; (ostream &amp;stream, const DeineKlasse &amp; d);

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1069853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1069853</guid><dc:creator><![CDATA[elise]]></dc:creator><pubDate>Fri, 02 Jun 2006 04:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für Ausgabe ableiten ? on Fri, 02 Jun 2006 06:12:30 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/448">@elise</a>: Ich glaube, Phun meinte das andere Ende der Ausgaben <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>Dazu leitest du dir am besten eine eigene Pufferklasse von std::streambuf (bzw. std::basic_streambuf&lt;...&gt;) ab und überschreibst die Methode overflow(), mit der du dein LCD-Display ansteuerst. Anschließend definierst du dir eine eigene Streamklasse, die diesen Puffer verwendet:</p>
<pre><code class="language-cpp">class lcdbuf : public std::streambuf
{
  virtual int_type overflow(int_type c)
  {
    //gibt Zeichen c aus
    //Rückgabe: c oder EOF
  }
}

class olcdstream : public std::ostream
{
  lcdbuf buffer;
public:
  olcdstream() : std::ostream(&amp;buf) {}
};
</code></pre>
<p>(mehr zur Arbeit mit Streams gibt's demnächst im Magazin)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1069873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1069873</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 02 Jun 2006 06:12:30 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für Ausgabe ableiten ? on Fri, 02 Jun 2006 06:33:30 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/448">@elise</a>: Ich glaube, Phun meinte das andere Ende der Ausgaben <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>
</blockquote>
<p>jep, habe verkehrtrum gedacht. kein wunder, so früh am morgen... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1069880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1069880</guid><dc:creator><![CDATA[elise]]></dc:creator><pubDate>Fri, 02 Jun 2006 06:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für Ausgabe ableiten ? on Fri, 02 Jun 2006 07:27:02 GMT]]></title><description><![CDATA[<p>Super!</p>
<p>Gerade getestet, funktioniert hervorragend, herzlichen Dank.<br />
Nun muss ich mich da noch durcharbeiten, ich möchte das ganze natürlich auch verstehen.<br />
Ich möchte noch Manipulatoren (ich glaub so hieß das) einbauen, damit ich das Display a) löschen kann und b) explizit in eine bestimmte Zeile springen kann.<br />
Was kommt eigentlich, so wie es im Moment ist, bei meiner Overflow-Methode an, wenn ich ein &lt;&lt;endl an den olcdstream gebe ?</p>
<p>Gruß<br />
Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1069902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1069902</guid><dc:creator><![CDATA[Phunkafizer]]></dc:creator><pubDate>Fri, 02 Jun 2006 07:27:02 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für Ausgabe ableiten ? on Fri, 02 Jun 2006 07:36:21 GMT]]></title><description><![CDATA[<p>Phunkafizer schrieb:</p>
<blockquote>
<p>Ich möchte noch Manipulatoren (ich glaub so hieß das) einbauen, damit ich das Display a) löschen kann und b) explizit in eine bestimmte Zeile springen kann.</p>
</blockquote>
<p>Einfache Manipulatoren kannst du als Stream-Funktion definieren, für das gotoxy wäre es etwas komplizierter:</p>
<pre><code class="language-cpp">olcdstream&amp; clear(olcdstream&amp; strm)
{
  //Display löschen
  return strm;
}
//-&gt; Anwendung
olcdstream display;
...
display&lt;&lt;clear;
//ich hoffe zumindest, daß es geht - notfalls arbeitet clear auf ostream&amp;'s und überprüft selber, ob es den richtigen Typ bekommen hat

class gotoxy
{
  int x,y;
public:
  gotoxy(int nx,int ny) : x(nx,y(ny) {}
  friend olcdstream&amp; operator&lt;&lt;(olcdstream&amp; strm,const gotoxy&amp; target)
  {
    //springe auf Zielposition
    return strm;
  }
};
...
display&lt;&lt;gotoxy(1,1);
</code></pre>
<blockquote>
<p>Was kommt eigentlich, so wie es im Moment ist, bei meiner Overflow-Methode an, wenn ich ein &lt;&lt;endl an den olcdstream gebe ?</p>
</blockquote>
<p>Afaik kommt dort ein \n an und anschließend ein flush()-Befehl (der aber nichts macht, weil die Klasse keinen internen Puffer verwendet).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1069908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1069908</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 02 Jun 2006 07:36:21 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für Ausgabe ableiten ? on Fri, 02 Jun 2006 08:01:47 GMT]]></title><description><![CDATA[<p>Habe zunächst die clear Funktion implementiert, selbige wird aber leider nicht aufgerufen wenn ich</p>
<p>diplay &lt;&lt; clear;</p>
<p>schreibe.</p>
<p>Wenn ich die Klasse gotoxy mit rein mache will mein Compiler nicht mehr kompilieren. Sollte ich mich wohl zunächst mal einlesen wie das mit dem &quot;friend&quot; Operator funktioniert, da steig ich noch nicht durch wozu der gut ist. OOP in C++ ist offensichtlich noch weitaus komplexer als in Delphi, da steige ich ganz gut durch.</p>
<p>Habs noch kurz anders versucht, und zwar habe ich in die Klasse olcdstream eine Methode implementiert:</p>
<p>class olcdstream: public std::ostream<br />
{<br />
lcdbuf buffer;<br />
public:<br />
olcdstream(): std::ostream(&amp;buffer) {}<br />
void clrscr();<br />
};</p>
<p>void olcdstream::clrscr()<br />
{<br />
cout &lt;&lt; &quot;CLEAR!&quot;;<br />
}</p>
<p>Aber die Methode wird irgendwie mit display.clrscr() nicht aufgerufen.<br />
Hm, da gibt's noch einiges zu lernen...</p>
<p>Gruß<br />
Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1069920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1069920</guid><dc:creator><![CDATA[Phunkafizer]]></dc:creator><pubDate>Fri, 02 Jun 2006 08:01:47 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für Ausgabe ableiten ? on Fri, 02 Jun 2006 08:07:27 GMT]]></title><description><![CDATA[<p>Phunkafizer schrieb:</p>
<blockquote>
<p>Wenn ich die Klasse gotoxy mit rein mache will mein Compiler nicht mehr kompilieren.</p>
</blockquote>
<p>Was sagt er denn? (die obige Klasse habe ich auf die Schnelle geschrieben, ist also ungetestet)</p>
<blockquote>
<p>Sollte ich mich wohl zunächst mal einlesen wie das mit dem &quot;friend&quot; Operator funktioniert, da steig ich noch nicht durch wozu der gut ist. OOP in C++ ist offensichtlich noch weitaus komplexer als in Delphi, da steige ich ganz gut durch.</p>
</blockquote>
<p>&quot;friend&quot; definiert einen Freund der Klasse, d.h. eine externe Funktion oder andere Klasse bekommt die Erlaubnis, auf deine privaten Elemente zugreifen zu dürfen.</p>
<blockquote>
<p>Habs noch kurz anders versucht, und zwar habe ich in die Klasse olcdstream eine Methode implementiert:</p>
<pre><code class="language-cpp">class olcdstream: public std::ostream
{
  lcdbuf buffer;
  public:
    olcdstream(): std::ostream(&amp;buffer) {}
    void clrscr();
};

void olcdstream::clrscr()
{
  cout &lt;&lt; &quot;CLEAR!&quot;;
}
</code></pre>
<p>Aber die Methode wird irgendwie mit display.clrscr() nicht aufgerufen.<br />
Hm, da gibt's noch einiges zu lernen...</p>
</blockquote>
<p>Eigentlich sollte sie aber (zumindest solange display ein olcdstream ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1069922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1069922</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 02 Jun 2006 08:07:27 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für Ausgabe ableiten ? on Fri, 02 Jun 2006 08:07:53 GMT]]></title><description><![CDATA[<p>Nachtrag:</p>
<p>Letzten Teil ignorieren, das</p>
<p>void olcdstream::clrscr()</p>
<p>funktioniert wunderbar...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1069924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1069924</guid><dc:creator><![CDATA[Phunkafizer]]></dc:creator><pubDate>Fri, 02 Jun 2006 08:07:53 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für Ausgabe ableiten ? on Fri, 02 Jun 2006 08:38:34 GMT]]></title><description><![CDATA[<p>Deinem Clear-Manipulator kann man evtl. durch ne Template-Funktion auf die Sprünge helfen:</p>
<pre><code class="language-cpp">// Der Manipulator von CStoll unter Verwendung von clrscr
olcdstream&amp; clear(olcdstream&amp; strm)
{
  strm.clrscr();
  return strm;
}

// Das Template
template&lt;typename Func&gt;
olcdstream&amp; operator&lt;&lt;(olcdstream&amp; strm, Func fn)
{
  return fn(strm);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1069942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1069942</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 02 Jun 2006 08:38:34 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für Ausgabe ableiten ? on Fri, 02 Jun 2006 18:09:06 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>:</p>
<pre><code class="language-cpp">gotoxy(int nx,int ny) : x(nx,y(ny) {}
</code></pre>
<p>Diese Zeile mag er nicht, dass da ein Fehler drin ist sehe ich, aber ich weiß nicht wie selbige richtig heißen müsste <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>
<p>Diese Methode stellt ja den Konstruktor da, nach dem Doppelpunkt wird ja normalerweise der geerbte Konstruktor aufgerufen, aber gotoxy hat ja keinen Konstruktor geerbt bekommen ?</p>
<p>Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1070254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1070254</guid><dc:creator><![CDATA[Phunkafizer]]></dc:creator><pubDate>Fri, 02 Jun 2006 18:09:06 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für Ausgabe ableiten ? on Fri, 02 Jun 2006 18:19:15 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">gotoxy (int nx, int ny) : x (nx), y (ny) {}
</code></pre>
<p>Mit der Konstruktorliste kann man auch Member initialisieren (und zwar mit deren Konstruktor).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1070269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1070269</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 02 Jun 2006 18:19:15 GMT</pubDate></item></channel></rss>