<?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[Design Frage: Wann sollte eine Methode ihr Objekt verändern?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab (mal wieder) eine Frage bezüglich Klassendesign. Mal angenommen ich hab eine Matrix Klasse für mathematische Aufgaben: Sollte dann die an dem Matrix-Objekt aufgerufene Methode dieses verändern oder nicht? Also Beispiel:</p>
<pre><code>matrix1.transpose(); // Die Matrix matrix1 ist jetzt transponiert
</code></pre>
<p>oder</p>
<pre><code>matrix2 = matrix1.transpose(); // Die Matrix matrix2 ist jetzt matrix1 transponiert, matrix 1 bleibt aber unverändert
</code></pre>
<p>Was ist hier zu bevorzugen und warum? Wann sollte man den oberen Fall wählen, wann den unteren?</p>
<p>Freue mich über input <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="🙂"
    /><br />
hs</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322543/design-frage-wann-sollte-eine-methode-ihr-objekt-verändern</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 19:54:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322543.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Dec 2013 11:12:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Design Frage: Wann sollte eine Methode ihr Objekt verändern? on Fri, 27 Dec 2013 11:13:10 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab (mal wieder) eine Frage bezüglich Klassendesign. Mal angenommen ich hab eine Matrix Klasse für mathematische Aufgaben: Sollte dann die an dem Matrix-Objekt aufgerufene Methode dieses verändern oder nicht? Also Beispiel:</p>
<pre><code>matrix1.transpose(); // Die Matrix matrix1 ist jetzt transponiert
</code></pre>
<p>oder</p>
<pre><code>matrix2 = matrix1.transpose(); // Die Matrix matrix2 ist jetzt matrix1 transponiert, matrix 1 bleibt aber unverändert
</code></pre>
<p>Was ist hier zu bevorzugen und warum? Wann sollte man den oberen Fall wählen, wann den unteren?</p>
<p>Freue mich über input <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="🙂"
    /><br />
hs</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373831</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Fri, 27 Dec 2013 11:13:10 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage: Wann sollte eine Methode ihr Objekt verändern? on Fri, 27 Dec 2013 11:34:44 GMT]]></title><description><![CDATA[<p>Ich wähle Alternative C:</p>
<pre><code class="language-cpp">auto mat2 = transposed(mat1);
</code></pre>
<p>Nur wenn man das in-place irgendwie optimaler hinbekommt, würde ich noch einen Member ohne Rückgabe anbieten. Aber in-place transponieren ist hakeliger als man auf Anhieb denken würde...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373832</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Fri, 27 Dec 2013 11:34:44 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage: Wann sollte eine Methode ihr Objekt verändern? on Fri, 27 Dec 2013 12:43:42 GMT]]></title><description><![CDATA[<p>decimad schrieb:</p>
<blockquote>
<p>Nur wenn man das in-place irgendwie optimaler hinbekommt, würde ich noch einen Member ohne Rückgabe anbieten. Aber in-place transponieren ist hakeliger als man auf Anhieb denken würde...</p>
</blockquote>
<p>Nicht wenn man einfach Indizes tauscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373838</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 27 Dec 2013 12:43:42 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage: Wann sollte eine Methode ihr Objekt verändern? on Fri, 27 Dec 2013 13:08:31 GMT]]></title><description><![CDATA[<p>Letzteres ist flexibler, weil Du das Original behälst. Ersteres ist i.d.R. schneller und/oder verbraucht weniger Speicherplatz. Welches der beiden Designziele wichtiger ist, hängt von der Aufgabe ab.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373840</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Fri, 27 Dec 2013 13:08:31 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage: Wann sollte eine Methode ihr Objekt verändern? on Fri, 27 Dec 2013 13:09:55 GMT]]></title><description><![CDATA[<p>Meine Faustregel, die sich bewährt hat:<br />
Memberfunktionen arbeiten inplace, freie Funktionen nicht.<br />
Im Zweifelsfall kannst du ja beides anbieten, wobei ich eher zu nicht-inplace tendiere. Mit move spart man sich auch Kopien.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373841</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 27 Dec 2013 13:09:55 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage: Wann sollte eine Methode ihr Objekt verändern? on Fri, 27 Dec 2013 13:32:56 GMT]]></title><description><![CDATA[<p>In-Place sollte man schon anbieten, da es tatsächlich effizienter sein kann. Meist kann man dann die andere Version über In-Place implementieren.</p>
<p>Die Frage ist eher, wie du die Funktionen benennst und ob du sie zu Memberfunktionen machst. Ein paar Möglichkeiten:</p>
<pre><code>m.transpose();
m.transposeCopy();

m.transpose();
m.transposed();

m.transposeInPlace();
m.transpose();

m.transpose();
transposed(m);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2373845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373845</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 27 Dec 2013 13:32:56 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage: Wann sollte eine Methode ihr Objekt verändern? on Fri, 27 Dec 2013 13:44:15 GMT]]></title><description><![CDATA[<p>Ich mag die Namen mit copy. Erinnert mich an die boost-string-replace-Funktionen. Zudem erwarte ich bei einer Matrix erstmal keine Kopie, wenn ich ihr sage &quot;Transponier Dich, Du!&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373847</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 27 Dec 2013 13:44:15 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage: Wann sollte eine Methode ihr Objekt verändern? on Fri, 27 Dec 2013 14:08:33 GMT]]></title><description><![CDATA[<p>Alles klar, danke für die vielen Antworten! Werd dann wohl tatsächlich jeweils zwei Methoden anbieten, das garantiert die größtmögliche Flexibilität.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373849</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Fri, 27 Dec 2013 14:08:33 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage: Wann sollte eine Methode ihr Objekt verändern? on Sat, 28 Dec 2013 09:42:24 GMT]]></title><description><![CDATA[<p>Über Index-Tausch zu transponieren vergrößert die Matrix, erzeugt runtime-checks, und dort wo das unwichtig ist, also bei großen Matrizen, verändert es drastisch die Zugriffscharakteristik im Speicher. Da würde ich dann lieber eine move-transposed-Funktion anbieten, das aus einer column-major eine row-major matrix macht, vice versa... Ansonsten hängt man bei den Algorithmen dann und hat überall is_transposed in einem if-Konstrukt rumstehen und die Algorithmen zweimal implementiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373910</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Sat, 28 Dec 2013 09:42:24 GMT</pubDate></item></channel></rss>