<?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[Virtueller operator++ - möglich?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe operator++() bisher immer so gesehen:</p>
<p>class Iterator {<br />
Iterator operator++();<br />
//...<br />
}</p>
<p>wenn ich jetzt aber Iterator zu einer pure virtual class mache, meckert der Compiler, weil operator++() ein Objekt zurückgibt.</p>
<p>Kann man die Iterator-Klasse trotzdem virtuell machen?</p>
<p>Vllt darf man bei operator++() auch eine Referenz zurückgeben? Nur habe ich operator++() bisher immer nur mit echten Objekten gesehen! Wie ist denn der Standard?</p>
<p>Danke für Antworten im voraus!<br />
Johannes</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248361/virtueller-operator-möglich</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 00:36:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248361.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 23 Aug 2009 23:43:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Virtueller operator++ - möglich? on Sun, 23 Aug 2009 23:43:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe operator++() bisher immer so gesehen:</p>
<p>class Iterator {<br />
Iterator operator++();<br />
//...<br />
}</p>
<p>wenn ich jetzt aber Iterator zu einer pure virtual class mache, meckert der Compiler, weil operator++() ein Objekt zurückgibt.</p>
<p>Kann man die Iterator-Klasse trotzdem virtuell machen?</p>
<p>Vllt darf man bei operator++() auch eine Referenz zurückgeben? Nur habe ich operator++() bisher immer nur mit echten Objekten gesehen! Wie ist denn der Standard?</p>
<p>Danke für Antworten im voraus!<br />
Johannes</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765551</guid><dc:creator><![CDATA[voidpointer]]></dc:creator><pubDate>Sun, 23 Aug 2009 23:43:19 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller operator++ - möglich? on Mon, 24 Aug 2009 00:15:48 GMT]]></title><description><![CDATA[<p>Beim operator++() geht natürlich eine Referenz. Beim operator++(int) müßte es eine Kopie sein. Normalerweise gibt der operator() auch nur eine Kopie zurück, weil sizeof(Iterator)==sizeof(int) und die Referenz wenn der Compiler den Code nicht sehen würde, was aber eh nicht der Fall ist, vielleicht was langsames machen würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765553</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 24 Aug 2009 00:15:48 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller operator++ - möglich? on Mon, 24 Aug 2009 02:45:04 GMT]]></title><description><![CDATA[<p>Virtuelle Funktionen und Iteratoren passen nicht so richtig zusammen. Zumindest nicht, wenn Du &quot;C++&quot;-Iteratoren schreiben willst, weil sie &quot;normal&quot;-kopierbar sein sollten, also ohne Indirektion benutzt werden. Wenn Du die richtigen virtuellen Funktionen aufgerufen haben willst, <em>musst</em> Du mit Indirektion arbeiten -- also mit Zeigern und/oder Referenzen arbeiten.</p>
<p>Auf den Verdacht hin, dass Du schon einmal Java (oder so) programmiert hast: Bei Sprachen wie Java, C#, u.s.w. ist die Indirektion implizit. Damit meine ich, dass eine Variable eines Klassentyps eigentlich immer eine Art Zeiger ist -- also nicht das Objekt selbst sondern nur ein Verweis darauf.</p>
<p>Nichtsdestotrotz kann man mit der <a href="http://thbecker.net/free_software_utilities/type_erasure_for_cpp_iterators/start_page.html" rel="nofollow">&quot;type erasure&quot;-Technik in C++ Iteratoren</a> erstellen, die sich wie &quot;normale&quot; C++-Iteratoren verhalten, aber &quot;intern polymorph&quot; sind. Man kann mit dieser Technik eine Familie von Iterator-Typen erzeugen, die nur über den Element-Typen parametrisiert werden und sonst &quot;Kontainer-agnostisch&quot; sind (anders formuliert: Der Typ eines solchen Iterators ist immer der gleiche, egal über was Du für einen Kontainer du iterierst). Das kann u.U. sehr praktisch sein.</p>
<p>(Andere Beispiele für &quot;type erasure&quot; sind boost::function und boost::any)</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765560</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 24 Aug 2009 02:45:04 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller operator++ - möglich? on Mon, 24 Aug 2009 22:07:08 GMT]]></title><description><![CDATA[<p>Danke für die schnellen Antworten. Mit Referenzen ging es, auf type-erasure musste ich zum Glück nicht zurückgreifen <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>Aber ich habe noch eine Frage: Woher weiß ich, ob eine operator()-Funktion nun eine Referenz oder das Objekt selber haben muss/darf? Gibt es da irgendwo eine Übersicht oder so etwas?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766119</guid><dc:creator><![CDATA[voidpointer_]]></dc:creator><pubDate>Mon, 24 Aug 2009 22:07:08 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller operator++ - möglich? on Mon, 24 Aug 2009 22:22:29 GMT]]></title><description><![CDATA[<p>voidpointer_ schrieb:</p>
<blockquote>
<p>Danke für die schnellen Antworten. Mit Referenzen ging es, auf type-erasure musste ich zum Glück nicht zurückgreifen <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>Aber ich habe noch eine Frage: Woher weiß ich, ob eine operator()-Funktion nun eine Referenz oder das Objekt selber haben muss/darf? Gibt es da irgendwo eine Übersicht oder so etwas?</p>
</blockquote>
<p>Ja nennt sich Hirn <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766122</guid><dc:creator><![CDATA[Ein großer Denker]]></dc:creator><pubDate>Mon, 24 Aug 2009 22:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller operator++ - möglich? on Tue, 25 Aug 2009 04:49:57 GMT]]></title><description><![CDATA[<p>voidpointer_ schrieb:</p>
<blockquote>
<p>Danke für die schnellen Antworten. Mit Referenzen ging es, auf type-erasure musste ich zum Glück nicht zurückgreifen <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>Aber ich habe noch eine Frage: Woher weiß ich, ob eine operator()-Funktion nun eine Referenz oder das Objekt selber haben muss/darf? Gibt es da irgendwo eine Übersicht oder so etwas?</p>
</blockquote>
<p><a href="http://c-plusplus.net/forum/viewtopic-var-t-is-232010.html" rel="nofollow">http://c-plusplus.net/forum/viewtopic-var-t-is-232010.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766150</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 25 Aug 2009 04:49:57 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller operator++ - möglich? on Tue, 25 Aug 2009 06:51:17 GMT]]></title><description><![CDATA[<p>voidpointer_ schrieb:</p>
<blockquote>
<p>Mit Referenzen ging es, auf type-erasure musste ich zum Glück nicht zurückgreifen <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>Aha. Zeig doch mal ein kleines Beispiel. Klingt nicht so, als hättest Du STL-kompatible Iteratoren geschrieben. Wenn das gar nicht Dein Ziel war (warum nicht?) hättest Du auch eine komplett andere Abstraktion nutzen können.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766172</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 25 Aug 2009 06:51:17 GMT</pubDate></item></channel></rss>