<?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[Fragen zu Konstruktoren, Getter Setter Methoden]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin gerade dabei mit C++ anzufagen, ich habe vor einiger Zeit mal was damit gemacht, hab jetzt aber ewig nichts getan, darum bin ich fast wieder am Anfang <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>Mal eine Frage zum Konstruktor einer Klasse: Damit lege ich ja die Variablen an und mit dem Destruktor lösche ich sie wieder &lt;- soweit so klar <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>Aber für was brauche ich dann diese getter und setter methoden im public bereich?</p>
<p>ich kann ja wenn ich einen konstruktor zB</p>
<p>konstruktor1(int, int, int)</p>
<p>im mit der erzeugung des objekts ja genauso drei int werte übergeben.</p>
<p>Oder ist es eben elgeanter das mit den getter und setter methoden zu machen?</p>
<p>andererseits lege ich drei int mit dem konstruktor an und übergebe keien werte regt sich der compiler auch wieder auf...</p>
<p>irgendwo blick ich da nicht ganz durch...</p>
<p>kann mir wer das ohne dem üblich c++ fachchinesisch das ich bis jetzt nur gefunden habe erklären?</p>
<p>danke &amp; lg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272927/fragen-zu-konstruktoren-getter-setter-methoden</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 11:36:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272927.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Aug 2010 17:45:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fragen zu Konstruktoren, Getter Setter Methoden on Fri, 27 Aug 2010 17:45:35 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin gerade dabei mit C++ anzufagen, ich habe vor einiger Zeit mal was damit gemacht, hab jetzt aber ewig nichts getan, darum bin ich fast wieder am Anfang <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>Mal eine Frage zum Konstruktor einer Klasse: Damit lege ich ja die Variablen an und mit dem Destruktor lösche ich sie wieder &lt;- soweit so klar <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>Aber für was brauche ich dann diese getter und setter methoden im public bereich?</p>
<p>ich kann ja wenn ich einen konstruktor zB</p>
<p>konstruktor1(int, int, int)</p>
<p>im mit der erzeugung des objekts ja genauso drei int werte übergeben.</p>
<p>Oder ist es eben elgeanter das mit den getter und setter methoden zu machen?</p>
<p>andererseits lege ich drei int mit dem konstruktor an und übergebe keien werte regt sich der compiler auch wieder auf...</p>
<p>irgendwo blick ich da nicht ganz durch...</p>
<p>kann mir wer das ohne dem üblich c++ fachchinesisch das ich bis jetzt nur gefunden habe erklären?</p>
<p>danke &amp; lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945177</guid><dc:creator><![CDATA[buzz_lightzyear]]></dc:creator><pubDate>Fri, 27 Aug 2010 17:45:35 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Konstruktoren, Getter Setter Methoden on Fri, 27 Aug 2010 18:11:13 GMT]]></title><description><![CDATA[<p>buzz_lightzyear schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>ich bin gerade dabei mit C++ anzufagen, ich habe vor einiger Zeit mal was damit gemacht, hab jetzt aber ewig nichts getan, darum bin ich fast wieder am Anfang <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>Mal eine Frage zum Konstruktor einer Klasse: Damit lege ich ja die Variablen an und mit dem Destruktor lösche ich sie wieder &lt;- soweit so klar <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>
</blockquote>
<p>Um das Anlegen und Löschen musst du dich ja (zum Glück) nicht selber kümmern. Der Konstruktor dient dazu den Variablen die richtigen Werte zuzuweisen und eventuell speziellere Konstruktionsaufgaben durchzuführen (Stichwort: dynamische Speicherverwaltung). Der Destruktor räumt alle Variablen ab und macht eventuelle komplexere Bereinigungsarbeiten (wieder Stichwort dynamische Speicherverwaltung), wobei man bei einfachen Klassen in der Regel keinen eigenen Destruktor benötigt.</p>
<blockquote>
<p>Aber für was brauche ich dann diese getter und setter methoden im public bereich?</p>
</blockquote>
<p>Die brauchst du gar nicht. Die hast du da ja hingemacht, weil du sie für sinnvoll erachtet hast. Zumindest sollte das so sein, vermutlich hast du einfach nur nachgemacht was du anderswo gesehen hast ohne es zu verstehen, oder? <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>ich kann ja wenn ich einen konstruktor zB</p>
<p>konstruktor1(int, int, int)</p>
<p>im mit der erzeugung des objekts ja genauso drei int werte übergeben.</p>
<p>Oder ist es eben elgeanter das mit den getter und setter methoden zu machen?</p>
</blockquote>
<p>Keinesfalls. Der sinn eines Konstruktors ist, dass das Objekt danach voll einsatzbereit ist. wenn das Objekt aber erst drei sinnvolle Werte benötigt, dann sollten das unbedingt Argumente des Konstruktors sein! Das letzte was du willst ist ein halbfertiges Objekt!</p>
<blockquote>
<p>andererseits lege ich drei int mit dem konstruktor an und übergebe keien werte regt sich der compiler auch wieder auf...</p>
</blockquote>
<p>Wenn das Objekt aber drei Werte benötigt um sinnvoll arbeiten zu können, dann ist das doch eine tolle sache wenn du vor so etwas gewarnt wirst. Falls du das alles mit Settern machen wolltest würdest du nicht gewarnt wenn dein Objekt noch nicht vollständig einsatzbereit ist.</p>
<p>Vielleicht gibt es ja auch sinnvolle Standardwerte für dein Objekt. Diese kannst du dann im Konstruktor angeben und kannst so auch Objekte konstruieren ohne Parameter an den Konstruktor zu übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945182</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 27 Aug 2010 18:11:13 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Konstruktoren, Getter Setter Methoden on Fri, 27 Aug 2010 19:11:40 GMT]]></title><description><![CDATA[<p>[quote=&quot;SeppJ&quot;]</p>
<p>buzz_lightzyear schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>ich bin gerade dabei mit C++ anzufagen, ich habe vor einiger Zeit mal was damit gemacht, hab jetzt aber ewig nichts getan, darum bin ich fast wieder am Anfang <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>Mal eine Frage zum Konstruktor einer Klasse: Damit lege ich ja die Variablen an und mit dem Destruktor lösche ich sie wieder &lt;- soweit so klar <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>
</blockquote>
<p>Um das Anlegen und Löschen musst du dich ja (zum Glück) nicht selber kümmern. Der Konstruktor dient dazu den Variablen die richtigen Werte zuzuweisen und eventuell speziellere Konstruktionsaufgaben durchzuführen (Stichwort: dynamische Speicherverwaltung). Der Destruktor räumt alle Variablen ab und macht eventuelle komplexere Bereinigungsarbeiten (wieder Stichwort dynamische Speicherverwaltung), wobei man bei einfachen Klassen in der Regel keinen eigenen Destruktor benötigt.</p>
<blockquote>
<p>Aber für was brauche ich dann diese getter und setter methoden im public bereich?</p>
</blockquote>
<p>Die brauchst du gar nicht. Die hast du da ja hingemacht, weil du sie für sinnvoll erachtet hast. Zumindest sollte das so sein, vermutlich hast du einfach nur nachgemacht was du anderswo gesehen hast ohne es zu verstehen, oder? <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="🙂"
    /> [quote]</p>
<p>gg genau so ist es <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>Ok, also das ganze zusammengefasst:</p>
<p>Lege ich ein Objekt an von dem ich schon fix weiss was es tun soll, lege ich die Variablen, eben zB drei int Werte mit dem Konstruktor an. Will ich nachträglich was ändern, mache ich das mit den getter und setter methoden, hab ich das so richtig verstanden?</p>
<p>Beispiel: ich erschaffe ein objekt Mensch, dem ich die drei werte alter, groesse, gewicht übergeben will.</p>
<p>Will ich später noch einen String mit dem Namen hinzufügen -&gt; Getter Setter Methoden.</p>
<p>danke &amp; lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945208</guid><dc:creator><![CDATA[buzz_lightzyear]]></dc:creator><pubDate>Fri, 27 Aug 2010 19:11:40 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Konstruktoren, Getter Setter Methoden on Fri, 27 Aug 2010 20:12:09 GMT]]></title><description><![CDATA[<p><strong>buzz_lightzyear</strong> :</p>
<p>Stell dir folgendes vor: Du hast eine Object (myObject) von einer Klasse (myClass) die eine Membervariable hat - und wenn diese Membervariable keinen sinnvollen Wert hat schmiert dein Programm ab sobald myObject.DoSomething() aufgerufen wird.</p>
<p>Sichere Vorgehensweise:</p>
<ol>
<li>
<p>Du kennst bereits einen Wert auf den du die Membervariable setzten kannst der 'sicher' ist - dann musst du nicht <em>unbedingt</em> einen Konstruktor mit Parametern anbieten sonder setzt halt diesen Wert beim Konstruktoraufruf. Der Benutzer kann dann später noch entscheiden ob er den (über getter/setter oder myObject.myMemberVariable = ...) ändern will (oder nicht).</p>
</li>
<li>
<p>Du kennst keinen Wert der immer 'sicher' ist - dann solltest du den Benutzer dazu zwingen einen Wert vorzugeben (also z.B. über deinen konstruktor(int, int, int) ... und am besten den Standardkonstruktor noch private machen wenn du keinen copy-konstruktor anbietest)</p>
</li>
</ol>
<p>Unsicher:<br />
Wenn du dich nämlich nur auf getter/setter verlässt (bzw. dass der Benutzer schon irgendwie die Membervariable setzten wird), dann kann es sein dass er:<br />
- ein Objekt anlegt<br />
- vergisst die Membervariable auf was sinnvolles zu setzten</p>
<p>-&gt; dann crasht das Programm sobald er versucht myObject.DoSomething() zu benutzen.</p>
<p>Prinzipiell sind getter/setter für public Variablen überflüssig. Ist Geschmackssache. Manche finden sie unnötig extra Schreibarbeit, andere denken sie machen ein Interface einheitlicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945224</guid><dc:creator><![CDATA[antialias]]></dc:creator><pubDate>Fri, 27 Aug 2010 20:12:09 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Konstruktoren, Getter Setter Methoden on Mon, 30 Aug 2010 08:33:37 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>danke für deine ausführliche antwort, jetzt ist mir das um vieles klarer!</p>
<p>danke &amp; lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1946016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946016</guid><dc:creator><![CDATA[buzz_lightzyear]]></dc:creator><pubDate>Mon, 30 Aug 2010 08:33:37 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Konstruktoren, Getter Setter Methoden on Mon, 30 Aug 2010 14:27:55 GMT]]></title><description><![CDATA[<p>buzz_lightzyear schrieb:</p>
<blockquote>
<p>Beispiel: ich erschaffe ein objekt Mensch, dem ich die drei werte alter, groesse, gewicht übergeben will.</p>
<p>Will ich später noch einen String mit dem Namen hinzufügen -&gt; Getter Setter Methoden.</p>
</blockquote>
<p>Ist eher so gedacht:</p>
<p>Beispiel: ich erschaffe ein objekt Mensch, dem ich die drei werte alter, groesse, gewicht übergeben will.</p>
<pre><code class="language-cpp">Mensch Wilhelm(30, 187, 90);
</code></pre>
<p>während dein Programm läuft wird dein Mensch ein Jahr älter.</p>
<p>Ein neues Objekt erstellst du nicht denn er ist ja immer noch der selbe Mensch aber da in der Klasse die Member natürlich private sind kannst du sie auch nicht einfach so ändern.</p>
<p>-&gt;</p>
<pre><code class="language-cpp">int alter = Wilhelm.getAlter();
 Wilhelm.setAlter(alter+1);
</code></pre>
<p>und schon ist dein Objekt älter <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/1946149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946149</guid><dc:creator><![CDATA[NichtWilhelm _)]]></dc:creator><pubDate>Mon, 30 Aug 2010 14:27:55 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Konstruktoren, Getter Setter Methoden on Mon, 30 Aug 2010 20:07:49 GMT]]></title><description><![CDATA[<p>NichtWilhelm _) schrieb:</p>
<blockquote>
<p>Ein neues Objekt erstellst du nicht denn er ist ja immer noch der selbe Mensch aber da in der Klasse die Member natürlich private sind kannst du sie auch nicht einfach so ändern.</p>
<p>-&gt;</p>
<pre><code class="language-cpp">int alter = Wilhelm.getAlter();
 Wilhelm.setAlter(alter+1);
</code></pre>
</blockquote>
<p>Kann man auch lösen, in dem man eine &quot;altern&quot; Methode einführt.</p>
<pre><code class="language-cpp">int alter = Wilhelm.getAlter();
Wilhelm.altern(1);
assert(Wilhelm.getAlter() == alter + 1);
</code></pre>
<p>Finde ich besser.</p>
<p>Wenn man ein Anemic Domain Model verwendet kann man sich die getter/setter ganz sparen (einfach structs verwenden).</p>
<p>Und wenn man eben kein Anemic Domain Model verwendet, dann gehört die Business-Logic IMO auch ins Business-Object. Und Altern würde ich zur Business-Logic zählen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1946305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946305</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 30 Aug 2010 20:07:49 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Konstruktoren, Getter Setter Methoden on Tue, 31 Aug 2010 07:23:21 GMT]]></title><description><![CDATA[<p>Der Mensch und sein Alter ist ein gutes Beispiel wo Manipulatoren (Setter) keinen Sinn machen (normalerweise). Das Alter muss zwingend im Konstruktor gesetzt werden, normalerweise beginnt ein Mensch mit Alter=0, in vielen Anwendungen wird man aber einen Konstruktor anbieten, der auch ältere Menschen erzeugen kann. Da niemand das Alter eines Menschen einfach so nach Belieben ändern kann, wird man dafür auch keine Methode anbieten. Die Logik wie sich das Alter eines Menschen verhält, ist dem Menschen selbst überlassen. Wenn niemand dringenden lesenden Zugriff auf das Alter benötigt oder bekommen soll (z.B. wenn du nur weiblichen Menschen behandelst <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="😃"
    /> ), dann wird es auch keinen Accessor(Getter) geben und der Mensch benutzt das Alter nur selber um z.B. zu berechnen, wie es ihm gerade geht.<br />
Beim Namen ist es schon wieder etwas anderes. Der kann sich auch später nochmal ändern und man kann auch erstmal ohne Namen auf die Welt kommen. Es sollte also wahrscheinlich einen Konstruktor geben, der auch ohne Namen einen Menschen erstellt (wenn das in Deiner Welt zulässig ist) und eine Methode, die den Namen ändern kann.<br />
Grundsätzlich wird alles, was für einen sinnvollen Zustand eines Objekt benötigt wird, im Konstruktor gesetzt und man gibt so wenig wie möglich Zugriffsmöglichkeiten auf die Daten des Objekts. Eben nur das was wirklich gebraucht wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1946383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946383</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Tue, 31 Aug 2010 07:23:21 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Konstruktoren, Getter Setter Methoden on Tue, 31 Aug 2010 09:25:03 GMT]]></title><description><![CDATA[<p>Ok stimmt Alter war ungünstig. Aber ersetze &quot;Alter&quot; durch &quot;Gewicht&quot; und &quot;altern&quot; durch &quot;Gewicht_zunehmen&quot; und wir haben ein gutes Beispiel.</p>
<p>Mir kam es einfach so vor als hätte der Threadersteller noch nicht ganz durchleuchtet, wofür man Getter bzw Setter braucht</p>
<p>lg und danke für die Verbesserung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1946445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1946445</guid><dc:creator><![CDATA[oderdochWilhelm?]]></dc:creator><pubDate>Tue, 31 Aug 2010 09:25:03 GMT</pubDate></item></channel></rss>