<?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[statische Methoden]]></title><description><![CDATA[<p>Hi,</p>
<p>sollte man Methoden, die nicht auf Membervariablen operieren, grundsätzlich als &quot;static&quot; deklarieren?<br />
Welche Vor- und Nachteile gibt es?</p>
<p>Gruß, Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183454/statische-methoden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 07:17:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183454.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Jun 2007 08:15:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to statische Methoden on Tue, 05 Jun 2007 08:15:09 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>sollte man Methoden, die nicht auf Membervariablen operieren, grundsätzlich als &quot;static&quot; deklarieren?<br />
Welche Vor- und Nachteile gibt es?</p>
<p>Gruß, Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299076</guid><dc:creator><![CDATA[Th0m4s]]></dc:creator><pubDate>Tue, 05 Jun 2007 08:15:09 GMT</pubDate></item><item><title><![CDATA[Reply to statische Methoden on Tue, 05 Jun 2007 08:17:56 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich meine, man sollte überlegen, ob sie überhaupt Memberfunktionen sein müssen.<br />
Wenn sie wirklich derart intensiv mit einer Klasse verheiratet sind (und ich glaube, das sind sie deutlich seltener, als man das spontan meint), ist die Frage, was man mit dieser Funktion &quot;später einmal&quot; machen will: virtual und static geht halt nicht.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299079</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 05 Jun 2007 08:17:56 GMT</pubDate></item><item><title><![CDATA[Reply to statische Methoden on Tue, 05 Jun 2007 08:42:08 GMT]]></title><description><![CDATA[<p>Hi Simon,</p>
<p>ich habe eine Klasse, die recht umfangreiche Objekte erzeugt. An einer Stelle im Programm brauche ich eine Teil-Funktionalität der Klasse, bei der ich nicht erst ein ganzes Objekt erzeugen will, um auf die Funktion zugreifen zu können.</p>
<p>Um mal ein Beispiel zu nennen:</p>
<pre><code class="language-cpp">class Zeichenobjekt
{
public:
  static bool isRund(objektID id);
};
</code></pre>
<p>und im Programm:</p>
<pre><code class="language-cpp">bool b = Zeichenobjekt::isRund(Zeichenobjekt::ID_Kreis);
</code></pre>
<p>an einer Stelle, wo ich ein Objekt &quot;Kreis&quot; einfach nicht habe bzw. nicht brauche.</p>
<p>Gruß, Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299095</guid><dc:creator><![CDATA[Th0m4s]]></dc:creator><pubDate>Tue, 05 Jun 2007 08:42:08 GMT</pubDate></item><item><title><![CDATA[Reply to statische Methoden on Tue, 05 Jun 2007 09:02:49 GMT]]></title><description><![CDATA[<p>Ist doch ein prima Kandidat für eine freie Funktion.<br />
Warum nicht einfach:</p>
<pre><code class="language-cpp">bool isRund(objektID id);

bool b = isRund(Zeichenobjekt::ID_Kreis);
</code></pre>
<p>?</p>
<p>Die Einordnung in einem Zeichenobjekt (gerade einer &quot;is-Funktion&quot;) suggeriert doch, dass man eine Eigenschaft des umschließenden Objekts abfragen will...<br />
Da Du statische Funktionen ja auch mit &quot;.&quot; aufrufen kannst, wir spätestens das verwirrend:</p>
<pre><code class="language-cpp">Quadrat z; // Annahme: Quadrat erbt von Zeichenobjekt
if(z.isRund(Zeichenobjekt::ID_Kreis)) {
 // ... ??
</code></pre>
<p>ODER (wenn ich es mir recht überlege): Es schreit eigentlich eher nach einer virtuellen Funktion, denn diese &quot;ID-Typisierung&quot; ist einfach schrecklich/aufwendig/fehleranfällig/...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299106</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 05 Jun 2007 09:02:49 GMT</pubDate></item><item><title><![CDATA[Reply to statische Methoden on Tue, 05 Jun 2007 09:02:34 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ja aber wo packe ich diese &quot;freie&quot; Funktion am besten hin? Ich finde, sie ist im Kontext dieser Klasse ganz gut aufgehoben, vor allem auch da sie einen innerhalb der Klasse definierten Argumenttypen verwendet.<br />
Ich teile Deine Bedenken, dass suggeriert werden könnte, man frage eine Objekteigenschaft ab. Aber eine &quot;freieFunktionen.cpp&quot; mit Funktionen, die aus den verschiedendsten Kontexten stammen, in mein Projekt einzubinden, finde ich auch nicht besonders attraktiv.</p>
<p>Gruß, Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299112</guid><dc:creator><![CDATA[Th0m4s]]></dc:creator><pubDate>Tue, 05 Jun 2007 09:02:34 GMT</pubDate></item><item><title><![CDATA[Reply to statische Methoden on Tue, 05 Jun 2007 09:10:07 GMT]]></title><description><![CDATA[<p>Th0m4s schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>ja aber wo packe ich diese &quot;freie&quot; Funktion am besten hin? ...</p>
</blockquote>
<p>In denselben namespace wie Deine Zeichenobjekt-IDs, denn eigentlich beschreiben sie keine Eigenschaft Deiner Zeichenobjekte, sondern der ZeichenObejktIDs.</p>
<p>Also entweder:</p>
<pre><code class="language-cpp">namespace Th0m4s_Zeichenwelt {
   enum ZeichenObjektID {
         Kreis,
         Quadrad
   };
   bool isRund(ZeichenObjektID);

   class ZeichenObjekt {
      ZeichenObjektID id;
   };
}
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">class ZeichenObjekt {
   public:
      virtual bool isRund() const = 0;
   };

   class Kreis : public ZeichenObjekt {
   public:
      virtual bool isRund() const { return true; }
   };

   class Quadrat : public ZeichenObjekt {
   public:
      virtual bool isRund() const { return false; }
   };
</code></pre>
<p>(wobei es auch gute Gründe gegen so eine Spezialisierung in diesem speziellen Fall gibt (habe ich hier im Forum mal gelesen, bekomme ich aber nicht mehr voreinander - ich habe es hier aber einfach mal als Weg aufgezeigt)</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299119</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 05 Jun 2007 09:10:07 GMT</pubDate></item><item><title><![CDATA[Reply to statische Methoden on Tue, 05 Jun 2007 09:23:52 GMT]]></title><description><![CDATA[<p>Th0m4s schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>ja aber wo packe ich diese &quot;freie&quot; Funktion am besten hin? Ich finde, sie ist im Kontext dieser Klasse ganz gut aufgehoben, vor allem auch da sie einen innerhalb der Klasse definierten Argumenttypen verwendet.<br />
Ich teile Deine Bedenken, dass suggeriert werden könnte, man frage eine Objekteigenschaft ab. Aber eine &quot;freieFunktionen.cpp&quot; mit Funktionen, die aus den verschiedendsten Kontexten stammen, in mein Projekt einzubinden, finde ich auch nicht besonders attraktiv.</p>
<p>Gruß, Thomas</p>
</blockquote>
<p>Schaff doch eine Klasse &quot;Utility&quot;, mach ein Singleton daraus un dbring die Funktionen dort unter.<br />
Damit erhältst Du einen aussagekräftigen Namensraum (nämlich den Klassennamen); musst die Funktionen nicht durch ein evtl fehlleitendes &quot;static&quot; kennzeichnen und kannst sogar Polymorphie nutzen.</p>
<p>Ausserdem werden freie Funktionen in der UML durch sog. &quot;Klassenutilities&quot; dargestellt; mit einer &quot;class Utility&quot; kann demnach wohl auch jeder etwas anfangen der ein wenig UML kennt.</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299124</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Tue, 05 Jun 2007 09:23:52 GMT</pubDate></item><item><title><![CDATA[Reply to statische Methoden on Tue, 05 Jun 2007 12:20:44 GMT]]></title><description><![CDATA[<p>Gast++ schrieb:</p>
<blockquote>
<p>Schaff doch eine Klasse &quot;Utility&quot;, mach ein Singleton daraus un dbring die Funktionen dort unter.<br />
Damit erhältst Du einen aussagekräftigen Namensraum (nämlich den Klassennamen); musst die Funktionen nicht durch ein evtl fehlleitendes &quot;static&quot; kennzeichnen und kannst sogar Polymorphie nutzen.</p>
</blockquote>
<p>So einen Quatsch macht man nur in Sprachen, die keine freien Funktionen kennt. Eine Klasse deklariere ich, wenn ich eine Klasse benötige. Was soll denn die Klasse &quot;Utility&quot; tun? Sie ist nur ein Namensraum. Warum verwendest Du dann nicht &quot;namespace&quot;? Als Klasse hat sie keine Aufgabe und damit keine Existenzberechtigung.</p>
<p>Prinzipiell finde ich die Idee, die Funktion als statisches Member der Klasse zu deklarieren sinnvoll, da sie thematisch eng mit der Klasse verknüpft ist. Allerdings stimme ich da mit Simon2 überein, daß die virtuelle Funktion die richtige Methode ist. Konstanten für Typ-IDs weisen in der Regel auf einen Designfehler hin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299246</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Tue, 05 Jun 2007 12:20:44 GMT</pubDate></item><item><title><![CDATA[Reply to statische Methoden on Tue, 05 Jun 2007 13:21:54 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>Gast++ schrieb:</p>
<blockquote>
<p>Schaff doch eine Klasse &quot;Utility&quot;, mach ein Singleton daraus un dbring die Funktionen dort unter.<br />
Damit erhältst Du einen aussagekräftigen Namensraum (nämlich den Klassennamen); musst die Funktionen nicht durch ein evtl fehlleitendes &quot;static&quot; kennzeichnen und kannst sogar Polymorphie nutzen.</p>
</blockquote>
<p>So einen Quatsch macht man nur in Sprachen, die keine freien Funktionen kennt. Eine Klasse deklariere ich, wenn ich eine Klasse benötige. Was soll denn die Klasse &quot;Utility&quot; tun? Sie ist nur ein Namensraum. Warum verwendest Du dann nicht &quot;namespace&quot;? Als Klasse hat sie keine Aufgabe und damit keine Existenzberechtigung.</p>
<p>Prinzipiell finde ich die Idee, die Funktion als statisches Member der Klasse zu deklarieren sinnvoll, da sie thematisch eng mit der Klasse verknüpft ist. Allerdings stimme ich da mit Simon2 überein, daß die virtuelle Funktion die richtige Methode ist. Konstanten für Typ-IDs weisen in der Regel auf einen Designfehler hin.</p>
</blockquote>
<p>zustimm</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299314</guid><dc:creator><![CDATA[inp]]></dc:creator><pubDate>Tue, 05 Jun 2007 13:21:54 GMT</pubDate></item><item><title><![CDATA[Reply to statische Methoden on Tue, 05 Jun 2007 13:58:44 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>...<br />
Prinzipiell finde ich die Idee, die Funktion als statisches Member der Klasse zu deklarieren sinnvoll, da sie thematisch eng mit der Klasse verknüpft ist. ...</p>
</blockquote>
<p>WENN sie denn thematisch mit ihr verknüpft ist ... und in diesem Fall ist sie es nicht wirklich (sondern eher mit ObjektID). Ich empfinde statische Funktionen aber inzwischen zunehmend als unnötige Verwirrung - vA, wenn es sich gleich um einen ganze Zoo handelt (und gab's da nicht noch so'ne &quot;protected-Sonderlocke&quot; beim Erben einer static Function ?).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299343</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 05 Jun 2007 13:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to statische Methoden on Wed, 06 Jun 2007 12:54:38 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>So einen Quatsch macht man nur in Sprachen, die keine freien Funktionen kennt.</p>
</blockquote>
<p>(kennen)</p>
<p>Hast Du grade Stress auf der Arbeit?</p>
<blockquote>
<p>Eine Klasse deklariere ich, wenn ich eine Klasse benötige. Was soll denn die Klasse &quot;Utility&quot; tun? Sie ist nur ein Namensraum. Warum verwendest Du dann nicht &quot;namespace&quot;? Als Klasse hat sie keine Aufgabe und damit keine Existenzberechtigung.</p>
</blockquote>
<p>Also keine Klasse? <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="👍"
    /><br />
(Btw sie ermöglichte Polymorphie.)</p>
<blockquote>
<p>Prinzipiell finde ich die Idee, die Funktion als statisches Member der Klasse zu deklarieren sinnvoll,</p>
</blockquote>
<p>Aber die Member eben der Klasse die wir vermeiden machen wir dann statisch? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<blockquote>
<p>da sie thematisch eng mit der Klasse verknüpft ist.</p>
</blockquote>
<p>Nur bezog sich die letzte Frage des OP auf Funktionen bei denen das eben nicht gilt. Aber egal! <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="👍"
    /></p>
<blockquote>
<p>...die virtuelle Funktion die richtige Methode ist.[...]Konstanten für Typ-IDs weisen in der Regel auf einen Designfehler hin.</p>
</blockquote>
<p>In diesem konkreten Fall stimmt beides.</p>
<p>Das war aber nicht die Frage auf die ich mich bezog wie aus dem Zitat auch für Nicht-Polemiker eindeutig hervorgeht.</p>
<p>Reiss Dich mal etwas zusammen!</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300013</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Wed, 06 Jun 2007 12:54:38 GMT</pubDate></item></channel></rss>