<?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[setter Methode ändert den Wert nicht (Vererbung)]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>habe zum Test 2 Klassen geschrieben (Ware und Brot). Brot erbt von Ware.<br />
Ich initialisiere ein Brot und möchte den Preis mit setPreis(1.00) ändern.<br />
Das funktioniert leider nicht. Muss ich vllt in C++ geerbte Methoden neu definieren, das wäre viel arbeit alles doppelt zu machen?</p>
<p>Hier mal die Codes mit kommentaren was sie ausgeben.</p>
<p>Main</p>
<pre><code>#include &quot;stdafx.h&quot;
#include &quot;brot.h&quot;

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	Brot *w = new Brot(&quot;Brot&quot;,1.25,20.5);
	cout &lt;&lt; &quot;Name: &quot; &lt;&lt; w-&gt;getName() &lt;&lt; endl; // Gibt Brot aus
	cout &lt;&lt; &quot;Preis: &quot; &lt;&lt; w-&gt;getPreis() &lt;&lt; endl; // Gibt 1.25 aus
	w-&gt;setPreis(1.10); // Hier möchte ich den Preis ändern
	cout &lt;&lt; &quot;Preis: &quot; &lt;&lt; w-&gt;getPreis() &lt;&lt; endl; // Hier der FEHLER (gibt auch 1.25 aus)
	cout &lt;&lt; &quot;Gewicht: &quot; &lt;&lt; w-&gt;getGewicht() &lt;&lt; endl; // gibt 20.5 aus
	delete w;
	system(&quot;pause&quot;);
	return 0;
}
</code></pre>
<p>Ware.h</p>
<pre><code>#include &lt;string&gt;

using namespace std;

class Ware {
private:
	string name;
	double preis;
public:
	void setName(string);
	string getName();
	void setPreis(double);
	double getPreis();
	Ware(string, double);
};
</code></pre>
<p>ware.cpp</p>
<pre><code>#include &quot;stdafx.h&quot;
#include &quot;ware.h&quot;

using namespace std;

Ware::Ware(string name, double preis){
	this-&gt;name = name;
	this-&gt;preis = preis;
}

void Ware::setName(string name){
	this-&gt;name = name;
}

void Ware::setPreis(double Preis){
	this-&gt;preis = preis;
}

string Ware::getName(){
	return this-&gt;name;
}

double Ware::getPreis(){
	return this-&gt;preis;
}
</code></pre>
<p>brot.h</p>
<pre><code>#include &lt;string&gt;
#include &quot;ware.h&quot;

using namespace std;

class Brot : public Ware {
private:
	double gewicht;
public:
	Brot(string, double, double);
	double getGewicht();
};
</code></pre>
<p>brot.cpp</p>
<pre><code>#include &quot;stdafx.h&quot;
#include &quot;brot.h&quot;

Brot::Brot(string name, double preis, double gewicht) : Ware(name,preis) {
	this-&gt;gewicht = gewicht;
}

double Brot::getGewicht() {
	return this-&gt;gewicht;	 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/316898/setter-methode-ändert-den-wert-nicht-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 13:44:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/316898.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 May 2013 13:51:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Mon, 20 May 2013 13:51:10 GMT]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>habe zum Test 2 Klassen geschrieben (Ware und Brot). Brot erbt von Ware.<br />
Ich initialisiere ein Brot und möchte den Preis mit setPreis(1.00) ändern.<br />
Das funktioniert leider nicht. Muss ich vllt in C++ geerbte Methoden neu definieren, das wäre viel arbeit alles doppelt zu machen?</p>
<p>Hier mal die Codes mit kommentaren was sie ausgeben.</p>
<p>Main</p>
<pre><code>#include &quot;stdafx.h&quot;
#include &quot;brot.h&quot;

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	Brot *w = new Brot(&quot;Brot&quot;,1.25,20.5);
	cout &lt;&lt; &quot;Name: &quot; &lt;&lt; w-&gt;getName() &lt;&lt; endl; // Gibt Brot aus
	cout &lt;&lt; &quot;Preis: &quot; &lt;&lt; w-&gt;getPreis() &lt;&lt; endl; // Gibt 1.25 aus
	w-&gt;setPreis(1.10); // Hier möchte ich den Preis ändern
	cout &lt;&lt; &quot;Preis: &quot; &lt;&lt; w-&gt;getPreis() &lt;&lt; endl; // Hier der FEHLER (gibt auch 1.25 aus)
	cout &lt;&lt; &quot;Gewicht: &quot; &lt;&lt; w-&gt;getGewicht() &lt;&lt; endl; // gibt 20.5 aus
	delete w;
	system(&quot;pause&quot;);
	return 0;
}
</code></pre>
<p>Ware.h</p>
<pre><code>#include &lt;string&gt;

using namespace std;

class Ware {
private:
	string name;
	double preis;
public:
	void setName(string);
	string getName();
	void setPreis(double);
	double getPreis();
	Ware(string, double);
};
</code></pre>
<p>ware.cpp</p>
<pre><code>#include &quot;stdafx.h&quot;
#include &quot;ware.h&quot;

using namespace std;

Ware::Ware(string name, double preis){
	this-&gt;name = name;
	this-&gt;preis = preis;
}

void Ware::setName(string name){
	this-&gt;name = name;
}

void Ware::setPreis(double Preis){
	this-&gt;preis = preis;
}

string Ware::getName(){
	return this-&gt;name;
}

double Ware::getPreis(){
	return this-&gt;preis;
}
</code></pre>
<p>brot.h</p>
<pre><code>#include &lt;string&gt;
#include &quot;ware.h&quot;

using namespace std;

class Brot : public Ware {
private:
	double gewicht;
public:
	Brot(string, double, double);
	double getGewicht();
};
</code></pre>
<p>brot.cpp</p>
<pre><code>#include &quot;stdafx.h&quot;
#include &quot;brot.h&quot;

Brot::Brot(string name, double preis, double gewicht) : Ware(name,preis) {
	this-&gt;gewicht = gewicht;
}

double Brot::getGewicht() {
	return this-&gt;gewicht;	 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2324711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324711</guid><dc:creator><![CDATA[bruno32]]></dc:creator><pubDate>Mon, 20 May 2013 13:51:10 GMT</pubDate></item><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Mon, 20 May 2013 13:52:53 GMT]]></title><description><![CDATA[<p>Ui hab den Fehler auf einmal gefunden.. Preis war groß geschrieben bei den Parametern der Funktion setPreis()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324713</guid><dc:creator><![CDATA[bruno32]]></dc:creator><pubDate>Mon, 20 May 2013 13:52:53 GMT</pubDate></item><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Mon, 20 May 2013 13:54:23 GMT]]></title><description><![CDATA[<p>Edit: Hast du ja selbst gefunden <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>
<p>An die m-Präfix-Bekämpfer: Das kann also passieren! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324714</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 20 May 2013 13:54:23 GMT</pubDate></item><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Mon, 20 May 2013 14:01:28 GMT]]></title><description><![CDATA[<p>m-Präfix?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324719</guid><dc:creator><![CDATA[bruno32]]></dc:creator><pubDate>Mon, 20 May 2013 14:01:28 GMT</pubDate></item><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Mon, 20 May 2013 14:05:13 GMT]]></title><description><![CDATA[<p>Es gab so eine Diskussion um den Sinn von m-Präfixen bei Membervariablen, also z.B. <code>mName</code> und <code>mPreis</code> . Ich will dich aber damit nicht beeinflussen, ist ganz okay wie du es machst <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/2324722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324722</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 20 May 2013 14:05:13 GMT</pubDate></item><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Mon, 20 May 2013 14:08:55 GMT]]></title><description><![CDATA[<p>Es ist üblich, Membervariablen in irgendeiner Weise als solche zu kennzeichnen. Eine Konvention ist, ein m_ voranzustellen, also etwa</p>
<pre><code class="language-cpp">class Ware {
private:
    std::string m_name;  // &lt;-- hier
    double      m_preis;
  ...
};
</code></pre>
<p>Ich persönlich stelle einen Unterstrich ans Ende des Variablennamen. Letztlich ist das dann Geschmackssache; der gewollte Effekt ist halt nur, dass am Namen erkennbar ist, ob eine lokale oder eine Membervariable gemeint ist.</p>
<p>Btw, du solltest es dir dringend verkneifen, in Headern</p>
<pre><code class="language-cpp">using namespace std;
</code></pre>
<p>zu schreiben. Wenn mal jemand anders deinen Code benutzen will, rechnet der nicht damit, dass deine Header ihm den gesamten Namensraum std in den globalen ziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324723</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 20 May 2013 14:08:55 GMT</pubDate></item><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Mon, 20 May 2013 14:11:25 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Es ist üblich, Membervariablen in irgendeiner Weise als solche zu kennzeichnen.</p>
</blockquote>
<p>Üblich, aber vielleicht sinnlos, je nach sonstigem Programmierstil.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324724</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 20 May 2013 14:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Mon, 20 May 2013 14:26:41 GMT]]></title><description><![CDATA[<p>okay das mit dem mPräfix habe ich verstanden. Meiner Meinung nach brauch man das nicht. Da ich durch this-&gt; sehe, dass ich gerade mit der membervariable arbeite.</p>
<p>wenn ich den namespace nicht angebe bekomme ich einen Fehler. Es ist sehr viel Aufwand und unübersichtlicher das alles expliziet vor die datentypen zu schreiben. Gibt es da noch eine andere gute Lösung und ist es okay wenn ich das in die .cpp Dateien schreibe?</p>
<p>Genauso verstehe ich nicht warum ich bei den Methoden der Klasse &quot;Ware&quot; immer ein Ware:: vor die Methode setzen muss? Warum nicht einfach ein class Ware { } aussenrum wäre viel weniger arbeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324725</guid><dc:creator><![CDATA[bruno32]]></dc:creator><pubDate>Mon, 20 May 2013 14:26:41 GMT</pubDate></item><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Mon, 20 May 2013 14:34:57 GMT]]></title><description><![CDATA[<p>bruno32 schrieb:</p>
<blockquote>
<p>wenn ich den namespace nicht angebe bekomme ich einen Fehler. Es ist sehr viel Aufwand und unübersichtlicher das alles expliziet vor die datentypen zu schreiben. Gibt es da noch eine andere gute Lösung</p>
</blockquote>
<p>Nein.</p>
<p>bruno32 schrieb:</p>
<blockquote>
<p>und ist es okay wenn ich das in die .cpp Dateien schreibe?</p>
</blockquote>
<p>Ja, vollkommen ok.</p>
<p>bruno32 schrieb:</p>
<blockquote>
<p>Genauso verstehe ich nicht warum ich bei den Methoden der Klasse &quot;Ware&quot; immer ein Ware:: vor die Methode setzen muss? Warum nicht einfach ein class Ware { } aussenrum wäre viel weniger arbeit?</p>
</blockquote>
<p>Klassendefinitionen müssen an einem Stück sein.<br />
Sonst könnte jemand in die Klasse nochwas später hinzufügen und Böse Sachen machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324731</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 20 May 2013 14:34:57 GMT</pubDate></item><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Mon, 20 May 2013 14:39:52 GMT]]></title><description><![CDATA[<p>okay vielen dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324735</guid><dc:creator><![CDATA[bruno32]]></dc:creator><pubDate>Mon, 20 May 2013 14:39:52 GMT</pubDate></item><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Mon, 20 May 2013 14:41:10 GMT]]></title><description><![CDATA[<p>bruno32 schrieb:</p>
<blockquote>
<p>wenn ich den namespace nicht angebe bekomme ich einen Fehler. Es ist sehr viel Aufwand und unübersichtlicher das alles expliziet vor die datentypen zu schreiben. Gibt es da noch eine andere gute Lösung und ist es okay wenn ich das in die .cpp Dateien schreibe?</p>
</blockquote>
<p>Ich habe mir mit der Zeit angewöhnt, den Namensraum fast immer anzugeben. Gerade wenn man verschiedene Bibliotheken hat, gibt es mehr als nur <code>std</code> , und teilweise sogar gleiche Bezeichner. Durch Angabe des Namensraums sieht man direkt, woher ein Bezeichner kommt und verhindert eventuelle Namenskonflikte.</p>
<p>bruno32 schrieb:</p>
<blockquote>
<p>Genauso verstehe ich nicht warum ich bei den Methoden der Klasse &quot;Ware&quot; immer ein Ware:: vor die Methode setzen muss? Warum nicht einfach ein class Ware { } aussenrum wäre viel weniger arbeit?</p>
</blockquote>
<p>Das ist halt die Syntax von Memberfunktionsdefinitionen in C++.</p>
<p>Im Ernst: Du solltest dir nicht zu viele Gedanken um den Schreibaufwand machen. Du wirst bald sehen, dass es wichtigere Probleme gibt <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2324736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324736</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 20 May 2013 14:41:10 GMT</pubDate></item><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Mon, 20 May 2013 14:52:19 GMT]]></title><description><![CDATA[<p>bruno32 schrieb:</p>
<blockquote>
<p>Genauso verstehe ich nicht warum ich bei den Methoden der Klasse &quot;Ware&quot; immer ein Ware:: vor die Methode setzen muss?</p>
</blockquote>
<p>Naja, soll der Compiler raten, zu welcher Klasse deine Methode gehört? :: == Zugehörigkeit angeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324739</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Mon, 20 May 2013 14:52:19 GMT</pubDate></item><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Tue, 21 May 2013 09:15:01 GMT]]></title><description><![CDATA[<p>bruno32 schrieb:</p>
<blockquote>
<p>Genauso verstehe ich nicht warum ich bei den Methoden der Klasse &quot;Ware&quot; immer ein Ware:: vor die Methode setzen muss? Warum nicht einfach ein class Ware { } aussenrum wäre viel weniger arbeit?</p>
</blockquote>
<p>Das liegt daran, dass du die Methode ausserhalb der Klasse definierst. Wenn du das innerhalb der Klasse tust (also in der .h) dann brauchst du dem Compiler nicht mehr hinterher sagen: &quot;übrigens das ist jetzt die Implementierung der Methode X von Klasse Y&quot;. Ist natürlich bei großen Methoden unübersichtlicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324894</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 21 May 2013 09:15:01 GMT</pubDate></item><item><title><![CDATA[Reply to setter Methode ändert den Wert nicht (Vererbung) on Wed, 22 May 2013 10:46:59 GMT]]></title><description><![CDATA[<p>naja gut. Ich werde mich dran gewöhnen.</p>
<p>Vielen dank an alle <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/2325223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325223</guid><dc:creator><![CDATA[bruno32]]></dc:creator><pubDate>Wed, 22 May 2013 10:46:59 GMT</pubDate></item></channel></rss>