<?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[Designfrage: Codeduplizierung bei Konstruktoren - Defaultwerte]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>Ich habe eine Klasse <code>Base</code> und eine geerbte Klasse <code>Derieved</code> .<br />
Der Konstruktor von <code>Base</code> enthält Default-Parameter, der von <code>Derieved</code> demnach auch.</p>
<pre><code class="language-cpp">class Base {
public:
    // Konstruktor mit Default-Parameter
    Base(int a = 12, int b = 23, int c = 34);

    // ...
};

class Derieved : public Base {
public:
    // Konstruktor mit den selben Default-Parametern
    Derieved(int a = 12, int b = 23, int c = 34);

    // ...
};
</code></pre>
<p>Das Problem: wenn sich nun ein Defaultwert in <code>Base::Base</code> ändert, müssen die Parameter auch in <code>Derieved::Derieved</code> geändert werden - und das finde ich sehr unschön.</p>
<p>Wie würdet ihr so ein Problem lösen?</p>
<p>Danke schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/260993/designfrage-codeduplizierung-bei-konstruktoren-defaultwerte</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 20:24:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/260993.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Feb 2010 20:05:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Designfrage: Codeduplizierung bei Konstruktoren - Defaultwerte on Thu, 11 Feb 2010 20:05:48 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>Ich habe eine Klasse <code>Base</code> und eine geerbte Klasse <code>Derieved</code> .<br />
Der Konstruktor von <code>Base</code> enthält Default-Parameter, der von <code>Derieved</code> demnach auch.</p>
<pre><code class="language-cpp">class Base {
public:
    // Konstruktor mit Default-Parameter
    Base(int a = 12, int b = 23, int c = 34);

    // ...
};

class Derieved : public Base {
public:
    // Konstruktor mit den selben Default-Parametern
    Derieved(int a = 12, int b = 23, int c = 34);

    // ...
};
</code></pre>
<p>Das Problem: wenn sich nun ein Defaultwert in <code>Base::Base</code> ändert, müssen die Parameter auch in <code>Derieved::Derieved</code> geändert werden - und das finde ich sehr unschön.</p>
<p>Wie würdet ihr so ein Problem lösen?</p>
<p>Danke schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1854375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1854375</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 11 Feb 2010 20:05:48 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage: Codeduplizierung bei Konstruktoren - Defaultwerte on Thu, 11 Feb 2010 20:31:35 GMT]]></title><description><![CDATA[<p>Da die Defaultparameter wahrscheinlich nicht irgendwelche Magic Numbers sind, kannst du deren Werte als Konstanten im Header der Basisklasse deklarieren. So musst du bei einer Änderung nur einen Ort anpassen.</p>
<p>P.S.: &quot;derived&quot; <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1854386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1854386</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 11 Feb 2010 20:31:35 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage: Codeduplizierung bei Konstruktoren - Defaultwerte on Thu, 11 Feb 2010 20:37:59 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>P.S.: &quot;derived&quot; <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="🙂"
    /></p>
</blockquote>
<p>Das sollte schon &quot;Derieved&quot; heißen :p<br />
Spaß bei Seite: Danke für den Hinweiß <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>Nexus schrieb:</p>
<blockquote>
<p>Da die Defaultparameter wahrscheinlich nicht irgendwelche Magic Numbers sind, kannst du deren Werte als Konstanten im Header der Basisklasse deklarieren.</p>
</blockquote>
<p>Wenn die Konstanten ausschließlich von dieser Klasse verwendet werden, haltest du es dann für sinnvoll sie als <code>static const</code> direkt mit in die Klasse zu packen? Oder widerspricht das dem allgemeinen Nutzen von <code>static const</code> ?</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1854392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1854392</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 11 Feb 2010 20:37:59 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage: Codeduplizierung bei Konstruktoren - Defaultwerte on Thu, 11 Feb 2010 20:37:44 GMT]]></title><description><![CDATA[<p>Vielleicht ist das ein Fall, wo ein Makro angebracht wäre?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1854394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1854394</guid><dc:creator><![CDATA[Aragnier]]></dc:creator><pubDate>Thu, 11 Feb 2010 20:37:44 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage: Codeduplizierung bei Konstruktoren - Defaultwerte on Thu, 11 Feb 2010 20:38:59 GMT]]></title><description><![CDATA[<p>Aragnier schrieb:</p>
<blockquote>
<p>Vielleicht ist das ein Fall, wo ein Makro angebracht wäre?</p>
</blockquote>
<p>Sicher nicht in C++ oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1854396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1854396</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 11 Feb 2010 20:38:59 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage: Codeduplizierung bei Konstruktoren - Defaultwerte on Thu, 11 Feb 2010 20:39:44 GMT]]></title><description><![CDATA[<p>Mir fällt es schwer, einen Fall auszudenken, in dem Defaultparameter für den Konstruktor einer Basisklasse sinnvoll sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1854397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1854397</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 11 Feb 2010 20:39:44 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage: Codeduplizierung bei Konstruktoren - Defaultwerte on Thu, 11 Feb 2010 21:08:22 GMT]]></title><description><![CDATA[<p>daersc schrieb:</p>
<blockquote>
<p>Wenn die Konstanten ausschließlich von dieser Klasse verwendet werden, haltest du es dann für sinnvoll sie als <code>static const</code> direkt mit in die Klasse zu packen?</p>
</blockquote>
<p>Könntest du machen. Eventuell sammelst du solche Konstanten auch in einem separaten Namensraum.</p>
<p>daersc schrieb:</p>
<blockquote>
<p>Aragnier schrieb:</p>
<blockquote>
<p>Vielleicht ist das ein Fall, wo ein Makro angebracht wäre?</p>
</blockquote>
<p>Sicher nicht in C++ oder?</p>
</blockquote>
<p>Hier macht es nicht besonders viel Sinn, aber Makros können schon ab und zu sinnvoll sein, um Codeduplizierung zu vermeiden.</p>
<p>camper schrieb:</p>
<blockquote>
<p>Mir fällt es schwer, einen Fall auszudenken, in dem Defaultparameter für den Konstruktor einer Basisklasse sinnvoll sind.</p>
</blockquote>
<p>Wenn die Basisklasse nicht durch die abgeleitete Klasse initialisiert wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1854407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1854407</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 11 Feb 2010 21:08:22 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage: Codeduplizierung bei Konstruktoren - Defaultwerte on Thu, 11 Feb 2010 22:31:47 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#define BASE_DEFAULT_PARAMS int a = 12, int b = 23, int c = 34

class Base
{
public:
    Base(BASE_DEFAULT_PARAMS);
};

class Diehreift : public Base
{
public:
    Diehreift(int nochEinAndererParameter, BASE_DEFAULT_PARAMS);
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1854430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1854430</guid><dc:creator><![CDATA[Aragnier]]></dc:creator><pubDate>Thu, 11 Feb 2010 22:31:47 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage: Codeduplizierung bei Konstruktoren - Defaultwerte on Thu, 11 Feb 2010 22:41:54 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Mir fällt es schwer, einen Fall auszudenken, in dem Defaultparameter für den Konstruktor einer Basisklasse sinnvoll sind.</p>
</blockquote>
<p>Wenn die Basisklasse nicht durch die abgeleitete Klasse initialisiert wird?</p>
</blockquote>
<p>Was mit LSP nicht zu vereinbaren ist. Zudem wissen wir nicht, was die Defaultargmuente repräsentieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1854436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1854436</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 11 Feb 2010 22:41:54 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage: Codeduplizierung bei Konstruktoren - Defaultwerte on Thu, 11 Feb 2010 23:31:35 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Was mit LSP nicht zu vereinbaren ist.</p>
</blockquote>
<p>Warum wird das Liskovsche Substitutionsprinzip verletzt, wenn die Basisklasse nicht abstrakt ist und man von ihr eigenständige Objekte erstellen kann? Die abgeleitete Klasse kann ja eine Erweiterung der Basisklasse repräsentieren und entsprechend mehr Parameter erfordern, welche eine Standardbelegung haben können.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class Schiff
{
    public:
        Schiff(float Geschwindigkeit = 200.f);
    // ...
};

class Faehre : public Schiff
{
    public:
        Faehre(float Geschwindigkeit = 200.f, unsigned int TransportPlaetze = 80);
    // ...
};
</code></pre>
<p>Anwendung:</p>
<pre><code class="language-cpp">int main()
{
    Schiff s;
    Fahre f;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1854450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1854450</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 11 Feb 2010 23:31:35 GMT</pubDate></item></channel></rss>