<?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[Wie Mehoden definieren, die aufgerufen werden müssen]]></title><description><![CDATA[<p>Hallo,</p>
<p>sagen wir ich habe eine Klasse A, die recht viele Konfigurationsmethoden besitzen.<br />
Man kann z.B. Anzahl Felder einstellen, Feldgröße usw usw.<br />
Ich möchte jetzt nicht, dass man alle Parameter gleich im Ctor angeben muss, sonst wird das ein Ctor mit 20 Parametern. Außerdem sieht es im Code unleslich aus:</p>
<pre><code class="language-cpp">A* a = new A(&quot;myA&quot;, 2, 3, 44.0f, -2, 33, usw.);
</code></pre>
<p>Man sieht einfach nicht sofort, für was die Zahlen stehen.<br />
Drum schreibe ich jede für jeden Set von Parametern einen setter:</p>
<pre><code class="language-cpp">A* a = new A(&quot;myA&quot;);
a-&gt;setDimension(2, 3);
a-&gt;setCellWidth(44.0f);
etc...
</code></pre>
<p>Das Problem ist nur: Der Benutzer von A MUSS jetzt diese setter aufrufen. Wie könnte man das machen, dass der Benutzer nicht gleich ALLE Params im Ctor übergeben muss, sondern bequem sprechende Setter benutzen kann, diese aber auch wirklich benutzen MUSS?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293448/wie-mehoden-definieren-die-aufgerufen-werden-müssen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 08:12:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293448.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 03 Oct 2011 11:30:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie Mehoden definieren, die aufgerufen werden müssen on Mon, 03 Oct 2011 11:30:22 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>sagen wir ich habe eine Klasse A, die recht viele Konfigurationsmethoden besitzen.<br />
Man kann z.B. Anzahl Felder einstellen, Feldgröße usw usw.<br />
Ich möchte jetzt nicht, dass man alle Parameter gleich im Ctor angeben muss, sonst wird das ein Ctor mit 20 Parametern. Außerdem sieht es im Code unleslich aus:</p>
<pre><code class="language-cpp">A* a = new A(&quot;myA&quot;, 2, 3, 44.0f, -2, 33, usw.);
</code></pre>
<p>Man sieht einfach nicht sofort, für was die Zahlen stehen.<br />
Drum schreibe ich jede für jeden Set von Parametern einen setter:</p>
<pre><code class="language-cpp">A* a = new A(&quot;myA&quot;);
a-&gt;setDimension(2, 3);
a-&gt;setCellWidth(44.0f);
etc...
</code></pre>
<p>Das Problem ist nur: Der Benutzer von A MUSS jetzt diese setter aufrufen. Wie könnte man das machen, dass der Benutzer nicht gleich ALLE Params im Ctor übergeben muss, sondern bequem sprechende Setter benutzen kann, diese aber auch wirklich benutzen MUSS?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126631</guid><dc:creator><![CDATA[SetterGetter2]]></dc:creator><pubDate>Mon, 03 Oct 2011 11:30:22 GMT</pubDate></item><item><title><![CDATA[Reply to Wie Mehoden definieren, die aufgerufen werden müssen on Mon, 03 Oct 2011 11:46:09 GMT]]></title><description><![CDATA[<p>Das kannst du nicht, ausser du überprüfst es im Debug Modus automatisch.</p>
<p>Du kannst alternativ aber auch einfach deine Parameter sinnvoll gruppieren und dann als struct parameter übergeben.</p>
<p>Viele Parameter deuten aber auf ein wackeliges Design hin und auf eine Klasse, die zu viel tut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126639</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 03 Oct 2011 11:46:09 GMT</pubDate></item><item><title><![CDATA[Reply to Wie Mehoden definieren, die aufgerufen werden müssen on Mon, 03 Oct 2011 12:05:43 GMT]]></title><description><![CDATA[<p>Es gibt einen Weg, der ist aber ein unglaubliches Anti-Pattern:</p>
<p>Beispielsweise:</p>
<pre><code class="language-cpp">Result r = new A().begin().setFirst('a').setSecond(0x0b).setThird(&quot;c&quot;).end();
</code></pre>
<p>Eine Ab-Art eines <a href="http://en.wikipedia.org/wiki/Fluent_interface" rel="nofollow">Fluent interfaces</a> nur ohne Auswahl:</p>
<pre><code class="language-cpp">class A
{
//friend Definitionen
private:
   char first;
   int second;
   string third;

   Result getResult(); 

public:
   A_01 begin() { return new A_01(this); };

}

class A_01
{
private:
   A a;

public:
   A_01(A _a) : a(_a) {}
   A_02 setFirst(char value) { a.first = value;return new A_02(a); }
}

class A_02
{
private:
   A a;
public:
   A_02(A _a) : a(_a) {}
   A_03 setSecond(int value) { a.second= value;return new A_03(a); }
}

class A_03
{
private:
   A a;
public:
   A_03(A _a) : a(_a) {}
   A_04 setThird(string value) { a.third = value;return new A_04(a); }
}

class A_04
{
private:
   A a;
public:
   A_04(A _a) : a(_a) {}
   Result end(s) { return a.getResult(); }
}
</code></pre>
<p>Damit man also <code>Result</code> erhält muss man also <code>begin().setFirst('a').setSecond(0x0b).setThird(&quot;c&quot;).end()</code> aufrufen. Also genau das was du wolltest.</p>
<p>Kannst natürlich auch die Methoden in beliebiger Reihenfolge aufrufen lassen, vergrößert den Code jedoch ein klein wenig. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126653</guid><dc:creator><![CDATA[Rhombicosidodecahedron]]></dc:creator><pubDate>Mon, 03 Oct 2011 12:05:43 GMT</pubDate></item></channel></rss>