<?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[Problem mit Überladung von !]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ein Klasse, die ein schwarz-weiß Bild darstellt. Nun möchte ich den ! - Operator überladen, damit ich schön alle schwarzen Pixel gegen weiße und alle weißen gegen schwarze austauschen kann. Ich drehe das Bild also quasi um.</p>
<p>Mein Code lautet:</p>
<pre><code class="language-cpp">Bild* operator!(void);
//..,
Bild* Bild::operator!() {
  return this;
}
//...
BildMama* foo() { //BildMama beerbt Bild
  Bild* p = new Bild();
  return !p //Fehler
}
</code></pre>
<p>Die Fehlermeldung lautet: error: cannot convert ‘bool’ to ‘Shape*’ in return</p>
<p>Zwar ist diese eindeutig, aber ich verstehe ihn trotzdem nicht. Woher kommt plötzlich bool? Wie kann ich den Fehler beheben?</p>
<p>Kann mir jemand helfen?<br />
Vielen Dank<br />
LG, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/311405/problem-mit-überladung-von</link><generator>RSS for Node</generator><lastBuildDate>Mon, 03 Aug 2026 16:43:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/311405.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Dec 2012 18:34:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 18:39:26 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ein Klasse, die ein schwarz-weiß Bild darstellt. Nun möchte ich den ! - Operator überladen, damit ich schön alle schwarzen Pixel gegen weiße und alle weißen gegen schwarze austauschen kann. Ich drehe das Bild also quasi um.</p>
<p>Mein Code lautet:</p>
<pre><code class="language-cpp">Bild* operator!(void);
//..,
Bild* Bild::operator!() {
  return this;
}
//...
BildMama* foo() { //BildMama beerbt Bild
  Bild* p = new Bild();
  return !p //Fehler
}
</code></pre>
<p>Die Fehlermeldung lautet: error: cannot convert ‘bool’ to ‘Shape*’ in return</p>
<p>Zwar ist diese eindeutig, aber ich verstehe ihn trotzdem nicht. Woher kommt plötzlich bool? Wie kann ich den Fehler beheben?</p>
<p>Kann mir jemand helfen?<br />
Vielen Dank<br />
LG, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277217</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Tue, 04 Dec 2012 18:39:26 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 18:39:06 GMT]]></title><description><![CDATA[<p>In einem Zeiger steht letztendlich auch nur eine Zahl. Und !Zahl gibt nunmal ein bool. Also steht da return bool. Deine Funktion soll aber BildMama* zurückgeben. Also ist entweder der Returntyp falsch oder der Typ der return-Anweisung. Im übrigen hat der Ausdruck gar nicht mit deiner operator! Funktion am Hut. Vielleicht solltest du den Zeiger vorher dereferenzieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277218</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Tue, 04 Dec 2012 18:39:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 18:41:43 GMT]]></title><description><![CDATA[<p>aber durch !p wende ich doch den überladenen Operator an. Dieser gibt wiederum *Bild zurück...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277220</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Tue, 04 Dec 2012 18:41:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 18:48:29 GMT]]></title><description><![CDATA[<p>Ahhh...ich verstehe deinen Punkt. Ich habe den Code so angepasst:</p>
<pre><code class="language-cpp">Bild operator!(void);
//..,
Bild Bild::operator!() {
  return this;
}
//...
BildMama* foo() { //BildMama beerbt Bild
  Bild* p = new Bild();
  p = !p;
  return &amp;p //Fehler
}
</code></pre>
<p>Jetzt kommt jedoch der Fehler &quot;could not convert ‘this’ from ‘Bild* const’ to ‘Bild’. Woran kann das liegen?</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277222</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Tue, 04 Dec 2012 18:48:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 18:49:14 GMT]]></title><description><![CDATA[<p>Das Problem ist, dass du da einen Zeiger hast, kein Objekt. Der Zeiger hat einen impliziten (eher eingebaut) Konvertierungs-Operator zu bool.<br />
Was du machen willst an der stelle ist: &quot;return !(*p)&quot;.<br />
Der ! operator wird aber eigentlich eher bei logischen Ausdrücken gebraucht, von daher weiß ich nicht, ob es eine so gute und intuitive Idee ist, ihn hier für die Invertierung zu verwenden, und dann auch noch ein neues Objekt per Zeiger zurückzugeben... Ich würde eine invert()-Methode favorisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277223</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 04 Dec 2012 18:49:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 18:55:22 GMT]]></title><description><![CDATA[<p>Eine Invert-Methode kommt für mich nicht infrage, weil ich einen Ausdruck parsen möchte, der &quot;!&quot; enthält. Damit wäre vieles einfacher. Kann man irgendwie dieses const-Problem beheben? Bei mir ist nichts const.</p>
<p>Der Fehler kommt übrigens in der Zeile &quot;return this&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277224</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Tue, 04 Dec 2012 18:55:22 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 19:57:21 GMT]]></title><description><![CDATA[<p>Oook...ich habe den Fehler lösen können. Ich habe einfach zulange java programmiert. Ich muss natürlich *this zurückgeben <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>edit: Ich muss mich korrigieren. Das war wohl doch nicht der Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277227</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Tue, 04 Dec 2012 19:57:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 19:27:29 GMT]]></title><description><![CDATA[<p>Mmhh..irgendwie macht mir das Überladen der Operatoren noch Schwierigkeiten. Ich möchte nun auch noch den &quot;&amp;&quot; überladen, um die Schnittmenge zweier Bilder zu berechnen. Der Code lautet:</p>
<pre><code class="language-cpp">Bild* Bild::operator&amp;(Bild* b) {
//...
	return this;
}

//Der Aufruf:

Bild* shape1 = new Bild();
Bild* shape2 = new Bild();//Rechteck erstellen
shape1 = shape1 &amp; shape2; //Fehler
</code></pre>
<p>Die Fehlermeldung lautet:</p>
<p>error: invalid operands of types ‘Bild*’ and ‘Bild*’ to binary ‘operator&amp;’</p>
<p>Das kann ich jedoch nicht nachvollziehen. Wie muss ich den Code anpassen, damit obiges Statement korrekt wird?</p>
<p>Danke nochmal!<br />
LG, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277235</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Tue, 04 Dec 2012 19:27:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 19:35:51 GMT]]></title><description><![CDATA[<p>probier auch hier *this zurückzugeben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277237</guid><dc:creator><![CDATA[sone_logoff]]></dc:creator><pubDate>Tue, 04 Dec 2012 19:35:51 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 19:38:20 GMT]]></title><description><![CDATA[<p>Bei so vielen Beiträgen hätt ich gedacht, dass du schon recht erfahren bist, aber anscheinend kommst du immer noch nicht mit Pointern und Objekten zu Recht. Sowas gibts in Java nicht, vielleicht ist das das Problem? Shape1 und Shape2 sind Zeiger, da wird dein Operator nicht verwendet. Dafür brauchst du Objekte, also z.B. indem du die Zeiger dereferenzierst. Dass es dann funktioniert kann ich dir nicht garantieren, hab mir jetzt deinen Code nicht genau angeschaut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277239</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Tue, 04 Dec 2012 19:38:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 19:54:28 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p>anscheinend kommst du immer noch nicht mit Pointern und Objekten zu Recht [sic]</p>
</blockquote>
<p>Ergänzend dazu: <a href="http://t.co/5U0ETtoH" rel="nofollow">Modern C++</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277241</guid><dc:creator><![CDATA[faqir]]></dc:creator><pubDate>Tue, 04 Dec 2012 19:54:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 19:54:46 GMT]]></title><description><![CDATA[<p><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="👍"
    /> Vielleicht erst lernen was Zeiger und Referenzen sind, dann anfangen mit Operatorüberladungen rumzuspielen. Spart dir viel sinnlosen Ärger. :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277242</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Tue, 04 Dec 2012 19:54:46 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 20:02:21 GMT]]></title><description><![CDATA[<p>Die Anzahl der Beiträge sagt eben nicht viel über die Erfahrung aus. Da ich schon länger nicht mehr C++ programmiert habe, habe ich in der Tat Probleme mit Pointern.</p>
<p>Ich verstehe jedoch deinen Punkt nicht. Hier noch einmal der Code:</p>
<pre><code class="language-cpp">Bild* operator&amp;(Bild* p) {
 return this;
}

Bild* b1 = new Bild();
Bild* b2 = new Bild();

b1 = b1 &amp; b2;
</code></pre>
<p>Der Operator &amp; bekommt einen Zeiger auf ein Bild Objekt. b2 ist aber doch ein Zeiger. Daher sollte das nicht das Problem sein.</p>
<p>error: invalid operands of types ‘Bild*’ and ‘Bild*’ to binary ‘operator&amp;’</p>
<p>Könnt ihr mir denn helfen bei der Fehlerbehebung?<br />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277243</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Tue, 04 Dec 2012 20:02:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 20:03:50 GMT]]></title><description><![CDATA[<blockquote>
<p>Könnt ihr mir denn helfen bei der Fehlerbehebung?</p>
</blockquote>
<p>Ganz einfach, verzichte auf die Pointer.</p>
<pre><code class="language-cpp">Bild b1;
Bild b2;

b1 = b1 &amp; b2; // et voilà
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2277244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277244</guid><dc:creator><![CDATA[faqir]]></dc:creator><pubDate>Tue, 04 Dec 2012 20:03:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 20:10:21 GMT]]></title><description><![CDATA[<p>Das ist aber doof, weil die Funktionm, in der ich die Berechnungen durchführe ein Bild* zurückgibt. Somit könnte ich Bild Instanzen nicht mehr lokal anlegen. Wie sieht denn die Zeigerlösung aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277247</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Tue, 04 Dec 2012 20:10:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 20:12:35 GMT]]></title><description><![CDATA[<p>Dann lass die Funktion halt keinen Pointer zurückgeben. Langsamer wird dein Code dadurch nicht (copy elision).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277249</guid><dc:creator><![CDATA[faqir]]></dc:creator><pubDate>Tue, 04 Dec 2012 20:12:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 20:30:42 GMT]]></title><description><![CDATA[<pre><code>Bild* b1 = new Bild();
Bild* b2 = new Bild();

b1 = b1 &amp; b2;
</code></pre>
<p>Das Problem ist, dass du hier zwei Bild * mit dem Operator &amp; verknüpfst. Der &amp;-Operator ist aber für Bild * (und sonstige Pointer) nicht definiert. Du willst nicht die Pointer verunden, sondern die Bilder.</p>
<pre><code>Bild* b1 = new Bild();
Bild* b2 = new Bild();

b1 = (*b1) &amp; (*b2);
</code></pre>
<p>b1 ist ein Pointer, (*b1) ist ein Bild, verunden von Pointern geht nicht, verunden von Bildern geht.</p>
<pre><code>Bild* operator&amp;(Bild* p) {
 return this;
}
</code></pre>
<p>Das sieht so aus, als wolltest du das Verunden zwischen Bild-Pointern definieren. Das geht nicht. Pointer sind eingebaut, eingebauten Datentypen kann man ihre Operatoren nicht überladen. Du musst schon den &amp;-Operator für Bilder definieren, nicht für Bildpointer.</p>
<pre><code>Bild operator&amp;(const Bild &amp;b){
    Bild neuesBild = generiereIrgendwieNeuesBildAusThisUndb(this, &amp;b);
    return neuesBild;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2277257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277257</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Tue, 04 Dec 2012 20:30:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Tue, 04 Dec 2012 21:37:34 GMT]]></title><description><![CDATA[<p>Ersteinmal musst du natürlich nicht überall mit Zeigern rumhantieren, da haben die anderen Teilnehmer Recht, das hier ist halt kein Java, wo es keine andere Möglichkeit gibt.<br />
Aber was mich jetzt wundert ist deine Argumentation, dass du operator! benutzen musst, weil du einen Term parsen willst, in dem ein ! vorkommt. Was hat denn das Parsen eines Quellcode-fernen Terms mit dem Aufbau des Quellcodes zu tun? Dir fliegt gerade wegen Deiner Affinität zu Zeigern deren implizite Konvertierbarkeit zum Typ 'bool' um die Ohren, da sollte man vielleicht nicht auch die ganzen Operatoren verwenden, die leider auch für bool definiert sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277270</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 04 Dec 2012 21:37:34 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Wed, 05 Dec 2012 07:44:35 GMT]]></title><description><![CDATA[<p>nwp3 schrieb:</p>
<blockquote>
<pre><code>Bild operator&amp;(const Bild &amp;b){
    Bild neuesBild = generiereIrgendwieNeuesBildAusThisUndb(this, &amp;b);
    return neuesBild;
}
</code></pre>
</blockquote>
<p>Ich habe deine Idee mal versucht durchzuführen, aber leider haben sich meine Befürchtungen bewahrheitet. Bei dir ist nun das Problem, dass Du &quot;neuesBild&quot; zurückgibst, obwohl dieses eine lokale Variabel ist. Damit wird diese nach dem Ausführen der Funktion gelöscht und alles führt zu einem Segmentation Fault. Nun bringt es auch nichts &quot;neuesBild&quot; als Klassenvariabel einzuführen, weil die Operationen in verschiedenen Klassen durchgeführt werden. Kann man so überhaupt ganze Objekte zurückgeben?</p>
<p>Deswegen habe ich eben Zeiger benötigt.</p>
<p>Gibt es doch eine Lösung, wie ich dieses letzte Problem beheben kann oder muss ich doch auf Zeiger umsteigen?</p>
<p>Vielen Dank<br />
LG, freakC++-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277347</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Wed, 05 Dec 2012 07:44:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Wed, 05 Dec 2012 07:40:47 GMT]]></title><description><![CDATA[<p>Ist doch egal, ob die Variable aus dem Scope geht, sie wird ja per Wert und somit als Kopie zurückgegeben. Es sei denn, du hast jetzt wieder einen Zeiger aus dem Rückgabewert gemacht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277349</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 05 Dec 2012 07:40:47 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Wed, 05 Dec 2012 07:46:41 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Bei dir ist nun das Problem, dass Du &quot;neuesBild&quot; zurückgibst, obwohl dieses eine lokale Variabel ist.</p>
</blockquote>
<p>Das ist kein Problem, sondern völlig in Ordnung. Das Problem dürfte eher sein, dass die Bild-Klasse keinen ordentlichen Copy-Konstruktor hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277351</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 05 Dec 2012 07:46:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Wed, 05 Dec 2012 07:58:46 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Ich verstehe jedoch deinen Punkt nicht. Hier noch einmal der Code:</p>
<pre><code class="language-cpp">Bild* operator&amp;(Bild* p) {
 return this;
}

Bild* b1 = new Bild();
Bild* b2 = new Bild();

b1 = b1 &amp; b2;
</code></pre>
<p>Der Operator &amp; bekommt einen Zeiger auf ein Bild Objekt. b2 ist aber doch ein Zeiger. Daher sollte das nicht das Problem sein.</p>
<p>error: invalid operands of types ‘Bild*’ and ‘Bild*’ to binary ‘operator&amp;’</p>
</blockquote>
<p>Hallo,<br />
ich versuche dir mal zu erklären, warum das nicht geht:<br />
1. Du hast eine Klasse definiert. D.h. du hast einen neuen Datentypen definiert.<br />
2. Du hast innerhalb der Klasse den Operator <code>&amp;</code> überladen.<br />
3. Dein Datentyp heist Bild. D.h. du hast den Operator <code>&amp;</code> für den Datentypen Bild überladen.<br />
4. Du schaust dir den Datentyp von <code>b1</code> und <code>b2</code> an. Du siehst, dass diese beiden Variablen vom Typ <code>Bild*</code> sind. Wir erinnern uns, dass du den Operator <code>&amp;</code> für den Typ <code>Bild</code> überladen hast. Und warum es nicht geht, dürfte dir jetzt ja klar sein: <code>Datentyp Bild* != Datentyp Bild</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277354</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Wed, 05 Dec 2012 07:58:46 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Wed, 05 Dec 2012 17:04:44 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>vielen Dank für die zahlreichen Antworten. Ich habe nun Erfolg gehabt, indem zum einen einen korrekten Copy-Konstruktor definiert habe (der hatte tatsächlich noch gefehlt) und zum anderen ein &quot;Bild&quot; zurückgebe.</p>
<p>Dennoch verstehe ich nicht, warum diese Lösung nicht langsamer sein soll. Ich muss nun immer ein temporäres &quot;Bild&quot; anlegen, das dan zurückgeben wird. Wir bei mir nun nicht ziemlich viel hin und her kopiert. Dieses Problem müsste man mit Zeigern doch eigentlich umgehen, oder?</p>
<p>Vielen Dank<br />
LG, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277551</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Wed, 05 Dec 2012 17:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Wed, 05 Dec 2012 17:36:05 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Ich habe nun Erfolg gehabt, indem zum einen einen korrekten Copy-Konstruktor definiert habe (der hatte tatsächlich noch gefehlt) und zum anderen ein &quot;Bild&quot; zurückgebe.</p>
</blockquote>
<p>Hast meinen Link angeschaut? <a href="http://t.co/5U0ETtoH" rel="nofollow">Modern C++</a>. Sofern Bild richtig designt ist (keine internen Zeiger), dürfte es nicht nötig sein, einen Kopierkonstruktor zu schreiben. Poste am besten einmal deine Klasse Bild oder zumindest ihre Membervariablen.</p>
<p>freakC++ schrieb:</p>
<blockquote>
<p>Ich muss nun immer ein temporäres &quot;Bild&quot; anlegen, das dan zurückgeben wird. Wir bei mir nun nicht ziemlich viel hin und her kopiert. Dieses Problem müsste man mit Zeigern doch eigentlich umgehen, oder?</p>
</blockquote>
<p>Das Problem wird schon umgangen, aber nicht mit Zeigern.<br />
Zum einen wäre da die Copy Elision, die ich schon genannt habe, du aber scheinbar überlesen hast. Schau mal da: <a href="http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/" rel="nofollow">Want Speed? Pass by Value.</a><br />
Zum anderen gibt es mit C++11 nun RValue-References.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277562</guid><dc:creator><![CDATA[faqir]]></dc:creator><pubDate>Wed, 05 Dec 2012 17:36:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Wed, 05 Dec 2012 17:41:09 GMT]]></title><description><![CDATA[<p>Was man hier noch machen könnte wäre &quot;copy on write shared data&quot;. Das verwendet z.B. Qt intern bei sehr vielen Klassen. Ob sich das bei dir lohnt und ob das Sinn macht, weiß ich nicht. In dem konkreten Beispiel von dir sollte copy elision in der Tat reichen. Vielleicht hast du aber noch mehr Use Cases für die Klasse, wo sich shared data dann lohnen würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277564</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Wed, 05 Dec 2012 17:41:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Überladung von ! on Wed, 05 Dec 2012 17:46:21 GMT]]></title><description><![CDATA[<p><a href="http://www.gotw.ca/publications/optimizations.htm" rel="nofollow">COW ist viel zu komplex und schadet der Performance</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277566</guid><dc:creator><![CDATA[kuh]]></dc:creator><pubDate>Wed, 05 Dec 2012 17:46:21 GMT</pubDate></item></channel></rss>