<?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[Verständnisfrage Funktion vs Klasse]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich tu mir mit C++ noch etwas schwer. Eine grundsätzliche Frage beschäftigt mich, und zwar den Moment, eine Klasse zu erzeugen oder einfach mehrere Funktionen zu verwenden.</p>
<p>Wenn ich z.B. eine Funktion mit mehreren Unterfunktionen habe, und ich nicht mehr als eine Instanz brauche, macht das dann noch Sinn aus der Funktion mit ihren Unterfunktionen eine eigene Klasse zu bilden ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/229289/verständnisfrage-funktion-vs-klasse</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 00:33:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/229289.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Dec 2008 22:56:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständnisfrage Funktion vs Klasse on Tue, 09 Dec 2008 22:56:29 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich tu mir mit C++ noch etwas schwer. Eine grundsätzliche Frage beschäftigt mich, und zwar den Moment, eine Klasse zu erzeugen oder einfach mehrere Funktionen zu verwenden.</p>
<p>Wenn ich z.B. eine Funktion mit mehreren Unterfunktionen habe, und ich nicht mehr als eine Instanz brauche, macht das dann noch Sinn aus der Funktion mit ihren Unterfunktionen eine eigene Klasse zu bilden ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1627927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627927</guid><dc:creator><![CDATA[Trial]]></dc:creator><pubDate>Tue, 09 Dec 2008 22:56:29 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage Funktion vs Klasse on Tue, 09 Dec 2008 23:23:10 GMT]]></title><description><![CDATA[<p>Die Frage ist, wie deine Funktionen aussehen. Wenn deine Funktionen immer auf den selben Daten arbeiten, macht es Sinn sich zu überlegen ob man sie in eine Klasse packt. Eine Klasse ist ja einfach nur eine Zusammenfassung von Daten und Funktionen (die auf den Daten operieren).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1627936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627936</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Tue, 09 Dec 2008 23:23:10 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage Funktion vs Klasse on Tue, 09 Dec 2008 23:31:06 GMT]]></title><description><![CDATA[<p>Ich mache das immer in etwa so: Wenn's unklar ist, ob es eine Klasse oder Funktions-Sammlung werden soll, werden es immer erst einzelne Funktionen. Wenn ich dann beim Benutzen den Funktionen merke, dass eine Klasse doch eleganter/angenehmer/besser/insgesamt-positiver wäre, wird halt eine Klasse draus gemacht.<br />
Es gibt dafür keine klaren Regeln und zusätzlich zu Klassen gibt's auch noch Namensräume, um Funktionalitäten zu kapseln.</p>
<p>Also einfach nach Gefühl, ein &quot;falsch&quot; gibt es eigentlich nicht, nur ein &quot;weniger schön&quot;. Und den ganzen Krams sollte man auch versuchen aus der Sicht des &quot;Benutzers&quot; zu sehen, also desjenigen, der die Funktionen/Klassen/Namensräume anwendet und nicht (nur) als derjenige, der sie implementiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1627939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627939</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 09 Dec 2008 23:31:06 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage Funktion vs Klasse on Wed, 10 Dec 2008 07:37:38 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also bei mir entscheidet sich sowas erstmal an der Frage: &quot;Gibt es ein <em>Ding</em>, mit dem etwas passiert?&quot; (und das einen definierten Zustand/Eigenschaften hat)<br />
So komme ich zuerst auf &quot;fachliche Objekte&quot;. Nähere Ausdifferenzierung führt dann oftmals zu einem &quot;Umschneiden&quot; (nicht selten sind &quot;Objekte der realen Welt&quot; schlechte Kandidaten für &quot;Programmierobjekte&quot;) auf fachlicher Ebene. Das Ganze hat erstmal noch nichts mit Technik oder Programmiersprache zu tun, sondern beschreibt erstmal nur, &quot;<em>wer</em> <em>was</em> mit <em>wem</em> tut&quot;.<br />
(später kommen dann über Implementierungstechniken, Sprachmittel, Infrastrukturaufgaben, ... haufenweise &quot;technische Objekte&quot; dazu)</p>
<p>Wenn etwas dagegen einen <em>Ablauf</em>/Algorithmus darstellt, ist es für mich erstmal ein Kandidat für eine Funktion.</p>
<p>(Übrigens schließe ich mich der Definition von Sutter (? oder war es Meyers ? Ich bringe die Beiden immer durcheinander) an, nach der auch freie Funktionen Bestandteil einer Klassenschnittstelle sein können, wenn sie im Wesentlichen zur Manipulation/Handling dieser Klasse dienen).</p>
<p>Also kurz gesagt:<br />
&quot;Ding&quot; -&gt; Objekt<br />
&quot;Ablauf&quot; -&gt; Funktion</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1628002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1628002</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 10 Dec 2008 07:37:38 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage Funktion vs Klasse on Wed, 10 Dec 2008 14:59:31 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>(Übrigens schließe ich mich der Definition von Sutter (? oder war es Meyers ? Ich bringe die Beiden immer durcheinander) an, nach der auch freie Funktionen Bestandteil einer Klassenschnittstelle sein können, wenn sie im Wesentlichen zur Manipulation/Handling dieser Klasse dienen).</p>
</blockquote>
<p>Wobei es hier wieder einige Streitfälle gibt. Im Grunde genommen sind bei vielen Anwendungsfällen freie Funktionen und Memberfunktionen nahezu gleichwertig, man muss sich halt entscheiden, was besser ins Konzept passt.</p>
<p>Ein Beispiel wäre eine Vektorklasse und eine Betragsfunktion <code>Norm()</code> . Eigentlich könnte man diese als Memberfunktion schreiben, allerdings hat man dann bei zusammengesetzten Ausdrücken etwas (meiner Ansicht nach) weniger Schönes:</p>
<pre><code class="language-cpp">(Vector1 + 4*Vector2).Norm();
</code></pre>
<p>In diesem Falle würde ich also eher zu freien Funktionen tendieren, zumal die Norm ja nicht direkt für die Instanz eines Vektors benötigt wird.</p>
<pre><code class="language-cpp">Norm(Vector1 + 4*Vector2);
</code></pre>
<p>Aber eben, da gibt es auch viele Fälle, wo das nicht so eindeutig ist. Wenn ich mir nicht sicher bin, überlege ich mir, ob die Funktion für ein Objekt selber erforderlich ist (weil sie z.B. auf private Member zugreift), oder ob sie einfach unterstützende Wirkung von aussen besitzt.</p>
<p>Für den Fall, wo man gar nicht wirklich ein Objekt hat, lohnt sich vielleicht eine freie Funktionssammlung mehr. Da gibt es wie gesagt noch Namespaces, das finde ich auch schöner als zum Beispiel eine Klasse nur mit statischen Funktionen. Da würde ich es wie Badestrand machen und ein wenig ausprobieren, mit der Zeit zeigt sich dann meistens, was am praktischsten ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1628311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1628311</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 10 Dec 2008 14:59:31 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage Funktion vs Klasse on Wed, 10 Dec 2008 17:59:16 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>vielen Dank für eure Tips, damit ist mir die Sache schon viel klarer geworden !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1628408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1628408</guid><dc:creator><![CDATA[Trial]]></dc:creator><pubDate>Wed, 10 Dec 2008 17:59:16 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage Funktion vs Klasse on Thu, 11 Dec 2008 09:57:26 GMT]]></title><description><![CDATA[<p>Scott Meyers hat für die Thematik mal ein paar Regeln aufgestellt, an die man sich gut halten kann:</p>
<p>Effective C++, Scott Meyers schrieb:</p>
<blockquote>
<ul>
<li>Virtual functions must be members. If f needs to be virtual, make it a member function of C.</li>
<li>operator&gt;&gt; and operator&lt;&lt; are never members. If f is operator&gt;&gt; or operator&lt;&lt;, make f a non-member function. If, in addition, f needs access to non-public members of C, make f a friend of C.</li>
<li>Only non-member functions get type conversions on their left-most argument. If f needs type conversions on its left-most argument, make f a non-member function.</li>
<li>If, in addition, f needs access to non-public members of C, make f a friend of C.</li>
<li>Everything else should be a member function. If none of the other cases apply, make f a member function of C.</li>
</ul>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1628689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1628689</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 11 Dec 2008 09:57:26 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage Funktion vs Klasse on Thu, 11 Dec 2008 17:22:29 GMT]]></title><description><![CDATA[<p>Grundsätzlich bin ich immer ein wenig skeptisch gegenüber solchen Regeln, die Anspruch auf &quot;richtiges Programmieren&quot; haben. Wie gesagt gibt es meines Erachtens auch Grenzfälle - man kann nicht kategorisch sagen, was wo besser ist.</p>
<p>Beispiel ist der folgende Punkt, wird der auch irgendwie gerechtfertigt? &quot;are never members&quot; tönt für mich nicht wie ein gutes Argument...</p>
<p>Tachyon schrieb:</p>
<blockquote>
<ul>
<li>operator&gt;&gt; and operator&lt;&lt; are never members. If f is operator&gt;&gt; or operator&lt;&lt;, make f a non-member function. If, in addition, f needs access to non-public members of C, make f a friend of C.</li>
</ul>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1628991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1628991</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 11 Dec 2008 17:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage Funktion vs Klasse on Thu, 11 Dec 2008 17:38:04 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Beispiel ist der folgende Punkt, wird der auch irgendwie gerechtfertigt? &quot;are never members&quot; tönt für mich nicht wie ein gutes Argument...</p>
<p>Tachyon schrieb:</p>
<blockquote>
<ul>
<li>operator&gt;&gt; and operator&lt;&lt; are never members. If f is operator&gt;&gt; or operator&lt;&lt;, make f a non-member function. If, in addition, f needs access to non-public members of C, make f a friend of C.</li>
</ul>
</blockquote>
</blockquote>
<p>Wenn du für eine Klasse Foo den operator&lt;&lt; z.B. für einen Stream (std::ostream) nicht global implementieren möchtest, dann müsstest du die Lib-Klasse ostream editieren. Ziemlich unschön und oftmals sogar nahezu unmöglich (für Nicht-Template Klassen, deren Implementierung in object files liegen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1628997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1628997</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Thu, 11 Dec 2008 17:38:04 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage Funktion vs Klasse on Thu, 11 Dec 2008 17:39:00 GMT]]></title><description><![CDATA[<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Wenn du für eine Klasse Foo den operator&lt;&lt; z.B. für einen Stream (std::ostream) nicht global implementieren möchtest, dann müsstest du die Klasse Lib-Klasse ostream editieren. Ziemlich unschön, oder (und oftmals sogar unmöglich)?</p>
</blockquote>
<p>Ja, das ist mir schon klar. Im Text steht aber ausdrücklich, dass <code>operator&gt;&gt;</code> und <code>operator&lt;&lt;</code> <strong>nie</strong> Member wären. Auch wenn es sich nicht um <code>std::ostream</code> -Operatoren handelt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1629000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1629000</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 11 Dec 2008 17:39:00 GMT</pubDate></item></channel></rss>