<?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[Komische Werte bei Methodenaufruf aus anderer Klasse]]></title><description><![CDATA[<p>Verstehe nicht warum ich keine sauberen Werte bekomme...</p>
<p>edit: gelösst ...<br />
myBaugrundsteuck.Grundstueck::setpreis(10);</p>
<pre><code>#include &quot;Aufg18.h&quot;

int main() {

	Grundstueck myGrundsteuck(&quot;Graz&quot;,1,2,3);
	myGrundsteuck.setpreis(10);
	myGrundsteuck.zeigeGrunddaten(); // funktioniert

	Baugrundstueck myBaugrundsteuck(&quot;Hello&quot;,1,2,3,4,5);
	myBaugrundsteuck.setpreis(10);
	myBaugrundsteuck.zeigeHausdaten(); // komische Werte

}
</code></pre>
<p>output:<br />
Gemarkung: Graz<br />
Flur: 1<br />
Flurstueck: 2<br />
Groesse: 3<br />
Wert: 540</p>
<p>Baujahr des Hauses: 4<br />
Wohnflaeche des Hauses: 5<br />
<strong>Aufruf anderer Klassenmethode =1.68547e+009</strong></p>
<pre><code>// bspl0050.h
#ifndef _BAUGRUNDSTUECK_
#define _BAUGRUNDSTUECK_
#include &quot;bspl0048a.h&quot;

class Baugrundstueck : public Grundstueck {
	public:
		Baugrundstueck(const char *n,
				 int f, int st, int g,int a, int b);
		Baugrundstueck();
		void setpreis(float preis);
		void speichereHausdaten(int a, int b);
		void zeigeHausdaten() const;
		float berechneVolumenpreis() const;
	private:
		int baujahr,groesse,preis;
};
#endif

// bspl0050.cpp
#include &lt;iostream&gt;
#include &quot;bspl0050a.h&quot;	// Baugrundstueck.h
using namespace std;

void Baugrundstueck::speichereHausdaten(int a, int b) {
	baujahr=a;
	groesse=b;
	sachwert+=static_cast&lt;float&gt;(groesse)*2.7F*320;
}

Baugrundstueck::Baugrundstueck() {
}

void Baugrundstueck::setpreis(float preis) {
	this-&gt;preis = preis;
}

float Baugrundstueck::berechneVolumenpreis() const{
	return Grundstueck::berechneFlaechenpreis() * preis;

}

Baugrundstueck::Baugrundstueck(const char *n,
				 int f, int st, int g,int a, int b) : Grundstueck(n,f,st,g) {
	speichereHausdaten(a,b);
}

void Baugrundstueck::zeigeHausdaten() const {
	cout &lt;&lt; &quot;\n&quot; &lt;&lt; &quot;Baujahr des Hauses:     &quot; 
			&lt;&lt; baujahr &lt;&lt; &quot;\n&quot;
			&lt;&lt; &quot;Wohnflaeche des Hauses: &quot;
			&lt;&lt; groesse &lt;&lt; &quot;\n&quot;
			&lt;&lt; &quot;Aufruf anderer Klassenmethode =&quot; &lt;&lt; Grundstueck::berechneFlaechenpreis();
}
</code></pre>
<pre><code>// Grundstueck.h (bspl0048.h)
#ifndef _GRUNDSTUECK_
#define _GRUNDSTUECK_

class Grundstueck {
	public:
		Grundstueck();
		~Grundstueck();
		Grundstueck(const char *n,
							 int f, int st, int g);
		void speichereGrunddaten(const char *n,
							 int f, int st, int g);
		void zeigeGrunddaten() const;
		void setpreis(float preis);
		float berechneFlaechenpreis() const;
	private:
		char gemarkung[30];
	protected:
		int flur, flurstueck, groesse,preis;
		float sachwert;
};

#endif

// Grundstueck.cpp (bspl0048.cpp)
#include &lt;iostream&gt;
#include &lt;cstring&gt;
#include &quot;bspl0048a.h&quot;	// Grundstueck.h
using namespace std;

Grundstueck::Grundstueck() {
}

Grundstueck::Grundstueck(const char *n,
							 int f, int st, int g) {

	speichereGrunddaten(n,f,st,g);
}

Grundstueck::~Grundstueck() {
}

void Grundstueck::setpreis(float preis) {
	this-&gt;preis = preis;
}

float Grundstueck::berechneFlaechenpreis() const{
	return preis * groesse;
}

void Grundstueck::speichereGrunddaten(const char *n,
					int f, int st, int g) {
	strncpy(gemarkung, n, 29);
	flur=f;
	flurstueck=st;
	groesse=g;
	sachwert=static_cast&lt;float&gt;(g)*180;
}

void Grundstueck::zeigeGrunddaten() const {
	cout &lt;&lt; &quot;\n&quot; &lt;&lt; &quot;Gemarkung:  &quot; &lt;&lt; gemarkung &lt;&lt; &quot;\n&quot; 
			&lt;&lt; &quot;Flur:       &quot; &lt;&lt; flur &lt;&lt; &quot;\n&quot;
			&lt;&lt; &quot;Flurstueck: &quot; &lt;&lt; flurstueck &lt;&lt; &quot;\n&quot;
			&lt;&lt; &quot;Groesse:    &quot; &lt;&lt; groesse &lt;&lt;  &quot;\n&quot;
			&lt;&lt; &quot;Wert:       &quot; &lt;&lt; sachwert &lt;&lt; &quot;\n&quot;;
			//&lt;&lt; &quot;Preis:      &quot; &lt;&lt; berechneFlaechenpreis();
}
</code></pre>
<pre><code>// Aufg18.h
#ifndef _BAUDENKMAL_
#define _BAUDENKMAL_
#include &quot;bspl0050a.h&quot;

class Baudenkmal : public Baugrundstueck {
	public:
		Baudenkmal();
		Baudenkmal(char *z,int a, int b,const char *n, int f, int st, int g);
		void speichereGebaeudeteil(char *z);
		void zeigeGebaeudeteil() const;
	private:
		char schutz[51];
};

#endif

// Aufg18.cpp
#include &lt;cString&gt;
#include &lt;iostream&gt;
#include &quot;Aufg18.h&quot;
using namespace std;

void Baudenkmal::speichereGebaeudeteil(char *z) {
	strncpy(schutz, z, 50);
}

Baudenkmal::Baudenkmal() {
}

Baudenkmal::Baudenkmal(char *z,int a, int b,const char *n, int f, int st, int g) : Baugrundstueck(n,f,st,g,a,b){
	speichereGebaeudeteil(z);
}

void Baudenkmal::zeigeGebaeudeteil() const {
	cout &lt;&lt; &quot;\n&quot; &lt;&lt; &quot;Geschuetztes Gebaeudeteil: &quot;
			 &lt;&lt; schutz;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/330635/komische-werte-bei-methodenaufruf-aus-anderer-klasse</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 02:32:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330635.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 19 Jan 2015 20:11:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Komische Werte bei Methodenaufruf aus anderer Klasse on Mon, 19 Jan 2015 20:32:17 GMT]]></title><description><![CDATA[<p>Verstehe nicht warum ich keine sauberen Werte bekomme...</p>
<p>edit: gelösst ...<br />
myBaugrundsteuck.Grundstueck::setpreis(10);</p>
<pre><code>#include &quot;Aufg18.h&quot;

int main() {

	Grundstueck myGrundsteuck(&quot;Graz&quot;,1,2,3);
	myGrundsteuck.setpreis(10);
	myGrundsteuck.zeigeGrunddaten(); // funktioniert

	Baugrundstueck myBaugrundsteuck(&quot;Hello&quot;,1,2,3,4,5);
	myBaugrundsteuck.setpreis(10);
	myBaugrundsteuck.zeigeHausdaten(); // komische Werte

}
</code></pre>
<p>output:<br />
Gemarkung: Graz<br />
Flur: 1<br />
Flurstueck: 2<br />
Groesse: 3<br />
Wert: 540</p>
<p>Baujahr des Hauses: 4<br />
Wohnflaeche des Hauses: 5<br />
<strong>Aufruf anderer Klassenmethode =1.68547e+009</strong></p>
<pre><code>// bspl0050.h
#ifndef _BAUGRUNDSTUECK_
#define _BAUGRUNDSTUECK_
#include &quot;bspl0048a.h&quot;

class Baugrundstueck : public Grundstueck {
	public:
		Baugrundstueck(const char *n,
				 int f, int st, int g,int a, int b);
		Baugrundstueck();
		void setpreis(float preis);
		void speichereHausdaten(int a, int b);
		void zeigeHausdaten() const;
		float berechneVolumenpreis() const;
	private:
		int baujahr,groesse,preis;
};
#endif

// bspl0050.cpp
#include &lt;iostream&gt;
#include &quot;bspl0050a.h&quot;	// Baugrundstueck.h
using namespace std;

void Baugrundstueck::speichereHausdaten(int a, int b) {
	baujahr=a;
	groesse=b;
	sachwert+=static_cast&lt;float&gt;(groesse)*2.7F*320;
}

Baugrundstueck::Baugrundstueck() {
}

void Baugrundstueck::setpreis(float preis) {
	this-&gt;preis = preis;
}

float Baugrundstueck::berechneVolumenpreis() const{
	return Grundstueck::berechneFlaechenpreis() * preis;

}

Baugrundstueck::Baugrundstueck(const char *n,
				 int f, int st, int g,int a, int b) : Grundstueck(n,f,st,g) {
	speichereHausdaten(a,b);
}

void Baugrundstueck::zeigeHausdaten() const {
	cout &lt;&lt; &quot;\n&quot; &lt;&lt; &quot;Baujahr des Hauses:     &quot; 
			&lt;&lt; baujahr &lt;&lt; &quot;\n&quot;
			&lt;&lt; &quot;Wohnflaeche des Hauses: &quot;
			&lt;&lt; groesse &lt;&lt; &quot;\n&quot;
			&lt;&lt; &quot;Aufruf anderer Klassenmethode =&quot; &lt;&lt; Grundstueck::berechneFlaechenpreis();
}
</code></pre>
<pre><code>// Grundstueck.h (bspl0048.h)
#ifndef _GRUNDSTUECK_
#define _GRUNDSTUECK_

class Grundstueck {
	public:
		Grundstueck();
		~Grundstueck();
		Grundstueck(const char *n,
							 int f, int st, int g);
		void speichereGrunddaten(const char *n,
							 int f, int st, int g);
		void zeigeGrunddaten() const;
		void setpreis(float preis);
		float berechneFlaechenpreis() const;
	private:
		char gemarkung[30];
	protected:
		int flur, flurstueck, groesse,preis;
		float sachwert;
};

#endif

// Grundstueck.cpp (bspl0048.cpp)
#include &lt;iostream&gt;
#include &lt;cstring&gt;
#include &quot;bspl0048a.h&quot;	// Grundstueck.h
using namespace std;

Grundstueck::Grundstueck() {
}

Grundstueck::Grundstueck(const char *n,
							 int f, int st, int g) {

	speichereGrunddaten(n,f,st,g);
}

Grundstueck::~Grundstueck() {
}

void Grundstueck::setpreis(float preis) {
	this-&gt;preis = preis;
}

float Grundstueck::berechneFlaechenpreis() const{
	return preis * groesse;
}

void Grundstueck::speichereGrunddaten(const char *n,
					int f, int st, int g) {
	strncpy(gemarkung, n, 29);
	flur=f;
	flurstueck=st;
	groesse=g;
	sachwert=static_cast&lt;float&gt;(g)*180;
}

void Grundstueck::zeigeGrunddaten() const {
	cout &lt;&lt; &quot;\n&quot; &lt;&lt; &quot;Gemarkung:  &quot; &lt;&lt; gemarkung &lt;&lt; &quot;\n&quot; 
			&lt;&lt; &quot;Flur:       &quot; &lt;&lt; flur &lt;&lt; &quot;\n&quot;
			&lt;&lt; &quot;Flurstueck: &quot; &lt;&lt; flurstueck &lt;&lt; &quot;\n&quot;
			&lt;&lt; &quot;Groesse:    &quot; &lt;&lt; groesse &lt;&lt;  &quot;\n&quot;
			&lt;&lt; &quot;Wert:       &quot; &lt;&lt; sachwert &lt;&lt; &quot;\n&quot;;
			//&lt;&lt; &quot;Preis:      &quot; &lt;&lt; berechneFlaechenpreis();
}
</code></pre>
<pre><code>// Aufg18.h
#ifndef _BAUDENKMAL_
#define _BAUDENKMAL_
#include &quot;bspl0050a.h&quot;

class Baudenkmal : public Baugrundstueck {
	public:
		Baudenkmal();
		Baudenkmal(char *z,int a, int b,const char *n, int f, int st, int g);
		void speichereGebaeudeteil(char *z);
		void zeigeGebaeudeteil() const;
	private:
		char schutz[51];
};

#endif

// Aufg18.cpp
#include &lt;cString&gt;
#include &lt;iostream&gt;
#include &quot;Aufg18.h&quot;
using namespace std;

void Baudenkmal::speichereGebaeudeteil(char *z) {
	strncpy(schutz, z, 50);
}

Baudenkmal::Baudenkmal() {
}

Baudenkmal::Baudenkmal(char *z,int a, int b,const char *n, int f, int st, int g) : Baugrundstueck(n,f,st,g,a,b){
	speichereGebaeudeteil(z);
}

void Baudenkmal::zeigeGebaeudeteil() const {
	cout &lt;&lt; &quot;\n&quot; &lt;&lt; &quot;Geschuetztes Gebaeudeteil: &quot;
			 &lt;&lt; schutz;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2438485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438485</guid><dc:creator><![CDATA[Bullz]]></dc:creator><pubDate>Mon, 19 Jan 2015 20:32:17 GMT</pubDate></item><item><title><![CDATA[Reply to Komische Werte bei Methodenaufruf aus anderer Klasse on Mon, 19 Jan 2015 20:27:51 GMT]]></title><description><![CDATA[<p>Der Default-Ctor von Grundstueck initialisiert nix.</p>
<p>Und die Member <code>Grundstueck::preis</code> und <code>Baugrundstueck::preis</code> sind zwei verschiedene Variablen, genau so <code>Grundstueck::groesse</code> und <code>Baugrundstueck::groesse</code> .</p>
<p><code>Grundstueck::preis</code> und <code>Grundstueck::groesse</code> werden also nirgends initialisiert. <code>Grundstueck::berechneFlaechenpreis</code> greift also auf nicht-initialisierte Variablen zu.</p>
<p>=&gt; Nochmal Grundlagen büffeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438488</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 19 Jan 2015 20:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to Komische Werte bei Methodenaufruf aus anderer Klasse on Mon, 19 Jan 2015 20:38:45 GMT]]></title><description><![CDATA[<p>Daran büffele ich gerade und ich tue mich sehr schwer.. ... bei virtuelle Methoden bin ich noch nicht. Die mal außen vor.</p>
<p>Wir haben 3 Klassen.</p>
<p>Klasse 1 mit 1 int Member variablen<br />
Klasse 2 mit 1 int Member variablen<br />
Klasse 3 mit 1 int Member variablen</p>
<p>Klasse 3 erbt von Klasse 2 und die erbt von 1</p>
<p>dann glaube ich schaut es variablen technisch so aus.</p>
<p>Klasse 1 besitzt eine int Variable<br />
Klasse 2 besitzt zwei int Variablen<br />
Klasse 3 besitzt drei int Variablen die alle unterschiedliche Werte haben können.</p>
<p>Eine Variable die den gleichen Namen hat ist drei mal gleichzeitig vorhanden. Ist das nicht vollkommen schwer zu durchblicken... vor allem wenn es dann komplexer wird ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438491</guid><dc:creator><![CDATA[Bullz]]></dc:creator><pubDate>Mon, 19 Jan 2015 20:38:45 GMT</pubDate></item><item><title><![CDATA[Reply to Komische Werte bei Methodenaufruf aus anderer Klasse on Mon, 19 Jan 2015 21:08:44 GMT]]></title><description><![CDATA[<p>Bullz schrieb:</p>
<blockquote>
<p>Wir haben 3 Klassen.</p>
<p>Klasse 1 mit 1 int Member variablen<br />
Klasse 2 mit 1 int Member variablen<br />
Klasse 3 mit 1 int Member variablen</p>
<p>Klasse 3 erbt von Klasse 2 und die erbt von 1</p>
<p>dann glaube ich schaut es variablen technisch so aus.</p>
<p>Klasse 1 besitzt eine int Variable<br />
Klasse 2 besitzt zwei int Variablen<br />
Klasse 3 besitzt drei int Variablen die alle unterschiedliche Werte haben können.</p>
</blockquote>
<p>Korrekt</p>
<blockquote>
<p>Eine Variable die den gleichen Namen hat ist drei mal gleichzeitig vorhanden. Ist das nicht vollkommen schwer zu durchblicken... vor allem wenn es dann komplexer wird ?</p>
</blockquote>
<p>Möglich. Aber dieser Fall tritt eigentlich erst dann auf, wenn mit der Klassenhierarchie etwas nicht stimmt. Wieso sollten die denn alle den gleichen Namen haben, wenn ihre Klassen jeweils etwas unterschiedliches modellieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438496</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 19 Jan 2015 21:08:44 GMT</pubDate></item><item><title><![CDATA[Reply to Komische Werte bei Methodenaufruf aus anderer Klasse on Mon, 19 Jan 2015 21:25:05 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Bullz schrieb:</p>
<blockquote></blockquote>
<p>Korrekt</p>
<blockquote>
<p>Eine Variable die den gleichen Namen hat ist drei mal gleichzeitig vorhanden. Ist das nicht vollkommen schwer zu durchblicken... vor allem wenn es dann komplexer wird ?</p>
</blockquote>
<p>Möglich. Aber dieser Fall tritt eigentlich erst dann auf, wenn mit der Klassenhierarchie etwas nicht stimmt. Wieso sollten die denn alle den gleichen Namen haben, wenn ihre Klassen jeweils etwas unterschiedliches modellieren?</p>
</blockquote>
<p>Ich habe das anderes gemeint. In meinem Beispiel hätten ich 3 Klassen und wenn die Elternklasse eine Variable hat dann haben sie auch alle ihre Kinder. Das hat nichts damit zu tun ob ich meine Variablen in der anderen Klasse anderes benenne .. das kann und werde ich tun <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 das int a aus Klasse1 auch als int a in Klasse 2 und 3 vorhanden ist. Das habe ich gemeint...</p>
<p>Ich behelfe mir folgend ... zu fragen wie hoch a ist ist falsch. Die Frage ist wie der Wert a für die Klasse 1,2,3 ist ... sowas kannte ich von C nicht ... damit komm ich halbwegs klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438500</guid><dc:creator><![CDATA[Bullz]]></dc:creator><pubDate>Mon, 19 Jan 2015 21:25:05 GMT</pubDate></item><item><title><![CDATA[Reply to Komische Werte bei Methodenaufruf aus anderer Klasse on Mon, 19 Jan 2015 21:43:52 GMT]]></title><description><![CDATA[<p>(public) Vererbung ist eine &quot;ist ein&quot;-Beziehung.</p>
<pre><code>class A;
class B : public A;
</code></pre>
<p>heißt B ist ein A. Da ein B also ein A ist, hat es auch sämtlich Eigenschaften eines A. Es kann natürlich auch noch weitere Eigenschaften haben, die alle Bs haben, aber nicht unbedingt jedes A haben muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438505</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 19 Jan 2015 21:43:52 GMT</pubDate></item><item><title><![CDATA[Reply to Komische Werte bei Methodenaufruf aus anderer Klasse on Mon, 19 Jan 2015 21:45:02 GMT]]></title><description><![CDATA[<p>Wenn B von A erbt, dann würde man das in C ca. so abbilden:</p>
<pre><code class="language-cpp">struct A
{
    ...
};

struct B
{
    struct A base;
    ...
};
</code></pre>
<p>Wenn du dann schreibst...</p>
<pre><code class="language-cpp">struct A
{
    int x;
};

struct B
{
    struct A base;
    int x;
};
</code></pre>
<p>Dann gibt es ja auch zwei x in B, eines von B selbst und eines in &quot;base&quot; drinnen.</p>
<p>Ist doch alles ganz logisch.<br />
In C++ ist es nix anderes.</p>
<p>Und real ist daran gar nix kompliziert. Es wäre dagegen ganz ganz schlimm wenn die Sprache Membervariablen mit dem selben Namen zu einer einzigen Variable zusammenfassen würde. Dann könnte man nämlich ganz schnell, ohne es zu wollen, die Funktion einer Basisklasse kaputtmachen können.</p>
<p>Und real wird auch viel weniger abgeleitet als man meinen könnte wenn man eine OO Sprache lernt. Klar, vererbung muss durchgenommen werden, weil man sie doch hin und wieder mal braucht. Speziell in C++ wo es keine Interfaces gibt. Aber man braucht sie viel viel seltener als die meisten Lernenden annehmen. Und wenn man sie braucht, dann meist ohne protected Datenmember. Und dann stellt sich die Frage gar nicht was die Basisklasse für Variablen haben könnte. Sie hat halt das was sie braucht, was auch immer das sein mag.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438506</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 19 Jan 2015 21:45:02 GMT</pubDate></item></channel></rss>