<?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[Was als Memberfunktion und was nicht?]]></title><description><![CDATA[<p>Hoi! <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>Ich zweifle im Moment sehr an meinen Konzepten, was eine Memberfunktion sein sollte und was nicht.</p>
<p>Klar, alles was über Zugriff auf Interna verfügen muss oder mit Zugriff auf diese signifikant performanter implementiert werden kann, muss als Memberfunktion geschrieben werden. Das gleiche gilt für Konstruktoren/Destruktoren und einige Operateorenüberladungen.</p>
<p>Im Gegenzug sollte man die meisten ansderen Operatoren frei überladen und Algorithmen, die sich recht generisch auch auf andere Typen anwenden lassen, auch frei implementieren (zb ein find() in einer Stringklasse)</p>
<p>Aber wie sieht es mit Funktionen aus, die generell nur mit einem bestimmten Typ Sinn machen?</p>
<pre><code class="language-cpp">Process process(...);
int bits = process.get_bitness();
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">Process process(...);
int bits = get_bitness(process);
</code></pre>
<p>Was für Regel habt ihr da selbst für euch definiert?</p>
<p>Danke und Grüße,<br />
Ethon</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294616/was-als-memberfunktion-und-was-nicht</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 19:44:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294616.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Oct 2011 10:45:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was als Memberfunktion und was nicht? on Fri, 28 Oct 2011 10:45:35 GMT]]></title><description><![CDATA[<p>Hoi! <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>Ich zweifle im Moment sehr an meinen Konzepten, was eine Memberfunktion sein sollte und was nicht.</p>
<p>Klar, alles was über Zugriff auf Interna verfügen muss oder mit Zugriff auf diese signifikant performanter implementiert werden kann, muss als Memberfunktion geschrieben werden. Das gleiche gilt für Konstruktoren/Destruktoren und einige Operateorenüberladungen.</p>
<p>Im Gegenzug sollte man die meisten ansderen Operatoren frei überladen und Algorithmen, die sich recht generisch auch auf andere Typen anwenden lassen, auch frei implementieren (zb ein find() in einer Stringklasse)</p>
<p>Aber wie sieht es mit Funktionen aus, die generell nur mit einem bestimmten Typ Sinn machen?</p>
<pre><code class="language-cpp">Process process(...);
int bits = process.get_bitness();
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">Process process(...);
int bits = get_bitness(process);
</code></pre>
<p>Was für Regel habt ihr da selbst für euch definiert?</p>
<p>Danke und Grüße,<br />
Ethon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137044</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 28 Oct 2011 10:45:35 GMT</pubDate></item><item><title><![CDATA[Reply to Was als Memberfunktion und was nicht? on Fri, 28 Oct 2011 10:53:21 GMT]]></title><description><![CDATA[<p>Kommt drauf an.<br />
Wenn es Funktionen wie get_bitness auch noch für einige andere Klassen außer Process gibt, die alle irgendwas gemeinsam haben und vielleicht sogar noch meist zusammen benutzt werden, könnte man die irgendwo zusammen und frei hinschreiben.<br />
Default würd ich aber erst dazu tendieren, get_bitness zur Process-Klasse zu schreiben. Ob dann als Memberfunktion oder als freie Funktion daneben find ich dann gar nicht mal so entscheidend, wobei schon allein weil die meisten IDEs das so schön anzeigen wohl doch die Memberfunktionsvariante vorziehen würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137047</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Fri, 28 Oct 2011 10:53:21 GMT</pubDate></item><item><title><![CDATA[Reply to Was als Memberfunktion und was nicht? on Fri, 28 Oct 2011 11:13:46 GMT]]></title><description><![CDATA[<p>man könnte es ja auch als statische funktion machen in der klasse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137058</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 28 Oct 2011 11:13:46 GMT</pubDate></item><item><title><![CDATA[Reply to Was als Memberfunktion und was nicht? on Fri, 28 Oct 2011 11:25:27 GMT]]></title><description><![CDATA[<p>So viel wie möglich als freie Funktionen, solange dadurch die Kapselung erhalten bleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137064</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 28 Oct 2011 11:25:27 GMT</pubDate></item><item><title><![CDATA[Reply to Was als Memberfunktion und was nicht? on Fri, 28 Oct 2011 13:25:52 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>So viel wie möglich als freie Funktionen, solange dadurch die Kapselung erhalten bleibt.</p>
</blockquote>
<p>Nun ja, das habe ich strikt so gemacht und meine process-Klasse wurde einfach nur ein Proxy für die Prozess-ID.<br />
Einfach den Integer direkt umherreichen möchte ich allerdings auch nicht, das verbaut mir die Möglichkeiten, die ich mit einer Klasse habe. (zb mehr Daten hinzufügen)</p>
<blockquote>
<p>man könnte es ja auch als statische funktion machen in der klasse</p>
</blockquote>
<p>Wäre doch nur extra Schreibarbeit? Eine statische Funktion hat doch die selben Berechtigungen wie eine normale Memberfunktion, bis darauf dass ich this explizit übergeben müsste.</p>
<blockquote>
<p>Ob dann als Memberfunktion oder als freie Funktion daneben find ich dann gar nicht mal so entscheidend, wobei schon allein weil die meisten IDEs das so schön anzeigen wohl doch die Memberfunktionsvariante vorziehen würde.</p>
</blockquote>
<p>Das wäre auch ein Argument für mich. <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>Na, ich freue mich über weitere Anregungen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2137134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137134</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 28 Oct 2011 13:25:52 GMT</pubDate></item><item><title><![CDATA[Reply to Was als Memberfunktion und was nicht? on Fri, 28 Oct 2011 13:56:42 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>So viel wie möglich als freie Funktionen, solange dadurch die Kapselung erhalten bleibt.</p>
</blockquote>
<p>Sollte man diese freien Funktionen dannn static machen sofern man sie nicht noch irgendwo anders braucht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137149</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 28 Oct 2011 13:56:42 GMT</pubDate></item><item><title><![CDATA[Reply to Was als Memberfunktion und was nicht? on Fri, 28 Oct 2011 14:04:46 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>So viel wie möglich als freie Funktionen, solange dadurch die Kapselung erhalten bleibt.</p>
</blockquote>
<p>Sollte man diese freien Funktionen dannn static machen sofern man sie nicht noch irgendwo anders braucht?</p>
</blockquote>
<p>Eine öffentliche API sollte wohl nie static sein, da man sie immer irgendwo anders braucht.<br />
Es geht hier schließlich darum, ob man alle öffentliche Klassenfunktion immer wenn möglich frei implementieren soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137155</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 28 Oct 2011 14:04:46 GMT</pubDate></item><item><title><![CDATA[Reply to Was als Memberfunktion und was nicht? on Fri, 28 Oct 2011 18:58:36 GMT]]></title><description><![CDATA[<p>Herb Sutter schreibt in seinem Exceptional C++ auch was dazu. Wenn du nach &quot;GotW interface principle&quot; suchst, findest du auch entsprechende Artikel im Web.</p>
<p>Generell würde ich auch so viele Funktionen wie möglich frei machen, aber teilweise sind Memberfunktionen wegen Konsistenzgründen besser geeignet.</p>
<pre><code class="language-cpp">void Object::SetPosition(Vector2f position);
void         SetPosition(Object&amp; this_, float x, float y); // ?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2137276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137276</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 28 Oct 2011 18:58:36 GMT</pubDate></item><item><title><![CDATA[Reply to Was als Memberfunktion und was nicht? on Sat, 29 Oct 2011 10:20:53 GMT]]></title><description><![CDATA[<p>Es gibt noch eine dritte erwähnenswerte Möglichkeit, nämlich das Auslagern in andere Klassen. Oft degradiere ich Klassen zu reinen Datenhaltern, die nur den Zugriff und vor allem die const correctness überwachen. Die eigentlichen Operationen werden dann von dritt Klassen durchgeführt. In diesem Fall also z.B.</p>
<p>Nexus schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void Object::SetPosition(Vector2f position);
void         SetPosition(Object&amp; this_, float x, float y); // ?
</code></pre>
</blockquote>
<pre><code class="language-cpp">void Object::Transform(Transformation&amp;);
</code></pre>
<p>bzw.</p>
<pre><code class="language-cpp">void Transformation::Transform(Object&amp;);
</code></pre>
<p>Das ist aber auch nicht immer sinnvoll. An vielen Stellen ist es auch sinnvoll die Klasse die Operationen als Member selber implementieren zu lassen, anderswo passen freie Funktionen gut. Eine sinnvolle Aussage &quot;immer so...&quot; gibt es nicht. Ich finde Hauptsache konsistent. Ich glaub H. Sutter schrieb es am Beispiel von std::string. Ich mein mich zu erinnern, dass ich dieses Item im Gegensatz zum größten Teil des restlichen Inhalt der Bücher nicht so toll fand. Wenn ich mich richtig erinnere, kam er auf eine Schnittstelle von string mit vielleicht 1/3 Member und 2/3 freie Funktionen. Gerade für eine so viel benutzte Bibliotheksklasse fänd ich das extrem nervig immer überlegen zu müssen ob es nun eine member oder freie Funktion ist. Vor allem weil das Argument der besseren Kapselung im Fall einer Klasse der Standardbibliothek nicht wirklich zieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137387</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sat, 29 Oct 2011 10:20:53 GMT</pubDate></item><item><title><![CDATA[Reply to Was als Memberfunktion und was nicht? on Sat, 29 Oct 2011 10:24:44 GMT]]></title><description><![CDATA[<p>Das Problem bei std::string ist, dass es die meisten der Algorithmen schon in der STL als freie Funktionstemplates gibt. Man braucht deshalb die Memberfunktionen sowieso nicht, wenn man generisch bleiben möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137388</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 29 Oct 2011 10:24:44 GMT</pubDate></item></channel></rss>