<?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[Konstruktorliste]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Ich hab diese Klasse hier nun geschrieben:</p>
<pre><code class="language-cpp">class Bruch
{
private:
	int zaehler;
	int nenner;

public:
	Bruch(int z, int n) : zaehler(z), nenner(n)		//Konstruktor
	{
		if(n == 0)
		{
			nenner = 1;
		}
	}

	double bruchAusrechnen()
	{
		return (double)(zaehler/nenner);
	}

	int getZaehler()
	{
		return zaehler;
	}

	int getNenner()
	{
		return nenner;
	}

	void setZaehler(int varZaehler)
	{
		zaehler = varZaehler;
	}

	void setNenner(int varNenner)
	{
		if(varNenner != 0)
		{
			nenner = varNenner;
		}
		else
		{
			cout &lt;&lt; &quot;Nenner sollte gleich Null gesetzt werden... Ich setze gleich 1!&quot;;
			nenner = 1;
		}
	}
};
</code></pre>
<p>Ich hab hier nun ein paar Fragen zu meiner Konstruktorliste. Laut meinem Compiler funktioniert der Code soweit. Mir ist aber nicht klar, warum man eine Konstruktorliste überhaupt verwenden soll. Man könnte bspw. auch so schreiben</p>
<pre><code class="language-cpp">Bruch(int zaehler, int nenner){...}
</code></pre>
<p>anstatt so</p>
<pre><code class="language-cpp">Bruch(int z, int n) : zaehler(z), nenner(n){...}
</code></pre>
<p>. Warum wurden, von der Syntax her gesehen, bei der eigentlichen Konstruktorliste Klammern gewählt? Was ich damit meine: zaehler(z). Das &quot;zaehler&quot; korrelliert ja mit der Membervariable zaehler. Der Wert der von der main-Funktion dann an den Konstruktor übergeben wird, steht also erstmal in zaehler und wird dann an das &quot;z&quot; des Konstruktors durchgereicht, oder? Stimmt das soweit? Man könnte also sagen, es ist eine Variable. Warum muss ich da dann immer eine Klammer schreiben? Klammern bringe ich von Grund auf mit Funktionen in Verbindung. Aber, zaehler(z) ist ja keine Funktion in dem Sinn, oder?</p>
<p>Könnt ihr mir helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297438/konstruktorliste</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 11:03:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297438.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Dec 2011 17:25:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 17:26:49 GMT]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Ich hab diese Klasse hier nun geschrieben:</p>
<pre><code class="language-cpp">class Bruch
{
private:
	int zaehler;
	int nenner;

public:
	Bruch(int z, int n) : zaehler(z), nenner(n)		//Konstruktor
	{
		if(n == 0)
		{
			nenner = 1;
		}
	}

	double bruchAusrechnen()
	{
		return (double)(zaehler/nenner);
	}

	int getZaehler()
	{
		return zaehler;
	}

	int getNenner()
	{
		return nenner;
	}

	void setZaehler(int varZaehler)
	{
		zaehler = varZaehler;
	}

	void setNenner(int varNenner)
	{
		if(varNenner != 0)
		{
			nenner = varNenner;
		}
		else
		{
			cout &lt;&lt; &quot;Nenner sollte gleich Null gesetzt werden... Ich setze gleich 1!&quot;;
			nenner = 1;
		}
	}
};
</code></pre>
<p>Ich hab hier nun ein paar Fragen zu meiner Konstruktorliste. Laut meinem Compiler funktioniert der Code soweit. Mir ist aber nicht klar, warum man eine Konstruktorliste überhaupt verwenden soll. Man könnte bspw. auch so schreiben</p>
<pre><code class="language-cpp">Bruch(int zaehler, int nenner){...}
</code></pre>
<p>anstatt so</p>
<pre><code class="language-cpp">Bruch(int z, int n) : zaehler(z), nenner(n){...}
</code></pre>
<p>. Warum wurden, von der Syntax her gesehen, bei der eigentlichen Konstruktorliste Klammern gewählt? Was ich damit meine: zaehler(z). Das &quot;zaehler&quot; korrelliert ja mit der Membervariable zaehler. Der Wert der von der main-Funktion dann an den Konstruktor übergeben wird, steht also erstmal in zaehler und wird dann an das &quot;z&quot; des Konstruktors durchgereicht, oder? Stimmt das soweit? Man könnte also sagen, es ist eine Variable. Warum muss ich da dann immer eine Klammer schreiben? Klammern bringe ich von Grund auf mit Funktionen in Verbindung. Aber, zaehler(z) ist ja keine Funktion in dem Sinn, oder?</p>
<p>Könnt ihr mir helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161573</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Wed, 28 Dec 2011 17:26:49 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 17:38:46 GMT]]></title><description><![CDATA[<p>In der Liste werden deine Member konstruiert...<br />
Konstruktoren sind Funktionen...<br />
:xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161574</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 28 Dec 2011 17:38:46 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 18:17:46 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<pre><code class="language-cpp">return (double)(zaehler/nenner);
</code></pre>
</blockquote>
<p>Das tut nucht das, was Du willst. Es ist immer noch eine normale Ganzzahldivision, da du nur das Divisionsergebnis explizit zu double konvertierst, nicht aber einen der beiden Operanden.</p>
<p>vip@r schrieb:</p>
<blockquote>
<p>Mir ist aber nicht klar, warum man eine Konstruktorliste überhaupt verwenden soll.</p>
</blockquote>
<p>Dort werden die Datenelemente initialisiert. Bei Datentypen wie int oder double ist das allerdings nicht so wichtig. Da kannst Du sie auch nachträglich im Konstruktor setzen wobei sie vorher einen nicht definierten Wert haben. Es gibt aber auch Datentypen (z.B. Klassen), die selbst Konstruktoren haben und über einen solchen Konstruktor initialisiert werden müssen. Deine Bruch-Klasse ist sogar ein Beispiel davon. Ein Objekt Deiner Bruchklasse <em>muss</em> über den Konstruktor, der 2 ints bekommt, initialisiert werden:</p>
<pre><code class="language-cpp">class SonstWas {
  Bruch b;
public:
  SonstWas()
  : b(23,42)
  {}
}
</code></pre>
<p>Und das hier</p>
<pre><code class="language-cpp">class SonstWas {
  Bruch b;
public:
  SonstWas()
  { b = Bruch(23,42); }
}
</code></pre>
<p>würde nicht kompilieren, weil b initialisiert werden muss bevor der Code in den {} Klammern ausgeführt wird. Das kann aber nicht funkionieren, da Bruch keinen Default-Konstruktor hat und der Compiler auch nicht weiß, woher die 2 ints kommen sollen, mit denen b initialisiert werden soll.</p>
<p>Die Art der Initialisierung mit den Klammern nennt man &quot;direkte Initialisierung&quot;. Das ist genau dasselbe wie das hier:</p>
<pre><code class="language-cpp">Bruch x (23,42); // direkte Initialisierung
</code></pre>
<p>Ja, es sieht wie ein Funktionsaufruf aus. Ist es ja auch irgendwie -- zumindest ein &quot;Konstruktoraufruf&quot; und ein Konstruktor ist so etwas ähnliches wie eine Funktion. Sie gibt nur nichts zurück und hat auch keinen eigenen Namen.</p>
<p>Cheers!<br />
kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161579</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 28 Dec 2011 18:17:46 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 19:05:26 GMT]]></title><description><![CDATA[<p>Davon abgesehen finde ich eine Überprüfung des Nenners auf 0 für unnötig. Und die Zuweisung so gar für falsch.<br />
Biete doch lieber eine freie Funktion an:</p>
<pre><code class="language-cpp">bool is_nan(const Bruch&amp; value)
{
  return value.get_nenner() == 0;
}
</code></pre>
<p>wenn dir so ist, als ob vor einer rechenoperation geprüft werden sollte, kannst du die funktion dort aufrufen und eine fehlermeldung (evtl. nur im debugmode) ausgeben, es korrigieren oder dich einfach gar nicht darum kümmern.<br />
wenn ich 2 integer dividieren will, muss ich den divisor auch auf 0 prüfen, wenn ich nicht möchte, dass da was schief geht.</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161595</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 28 Dec 2011 19:05:26 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 19:08:02 GMT]]></title><description><![CDATA[<p>Wenn, dann mach doch gleich einen statischen Member:</p>
<pre><code class="language-cpp">static const Bruch NaN(0, 0);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2161596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161596</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 28 Dec 2011 19:08:02 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 19:09:35 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wenn, dann mach doch gleich einen statischen Member:</p>
<pre><code class="language-cpp">static const Bruch NaN(0, 0);
</code></pre>
</blockquote>
<p>Quark, mal wieder, leider.</p>
<p>Dann zahlste ganz ohne Not im op== drauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161598</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 28 Dec 2011 19:09:35 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 19:14:22 GMT]]></title><description><![CDATA[<p>???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161604</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 28 Dec 2011 19:14:22 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 20:12:12 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wenn, dann mach doch gleich einen statischen Member:</p>
<pre><code class="language-cpp">static const Bruch NaN(0, 0);
</code></pre>
</blockquote>
<p>Ich würde sowas gar nicht erst zulassen. Finde es sehr fragwürdig was der Threadsteller da macht wenn ich 0 als Nenner übergebe. An solchen Stellen sollte man nicht versuchen Logik-Fehler auszumerzen, sondern knallhart nen Fehler werfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161623</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 28 Dec 2011 20:12:12 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 20:24:42 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wenn, dann mach doch gleich einen statischen Member:</p>
<pre><code class="language-cpp">static const Bruch NaN(0, 0);
</code></pre>
</blockquote>
<p>und dann hat man was gekonnt?<br />
op== kann man nicht nehmen, weil dort (außer bei sonderfällen) zaehler und nenner übereinstimmen müssen, NaN ists aber immer, wenn der nenner 0 ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161630</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 28 Dec 2011 20:24:42 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 20:28:45 GMT]]></title><description><![CDATA[<p>Ich vesteh eure Einwände überhaupt nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161631</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 28 Dec 2011 20:28:45 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 20:32:33 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ich vesteh eure Einwände überhaupt nicht.</p>
</blockquote>
<p>dann zeig mal genau, was du mit dem statischen member vor hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161633</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 28 Dec 2011 20:32:33 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 20:35:16 GMT]]></title><description><![CDATA[<p>Was soll ich denn groß damit vorhaben? Ist das nicht offensichtlich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161634</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 28 Dec 2011 20:35:16 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 20:37:58 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Was soll ich denn groß damit vorhaben? Ist das nicht offensichtlich?</p>
</blockquote>
<p>entweder du hast nen denkfehler oder bisher hat einfach niemand erkannt, wie toll dein super vorschlag ist, weil es doch nicht so offensichtlich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161636</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 28 Dec 2011 20:37:58 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Wed, 28 Dec 2011 21:07:28 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>???</p>
</blockquote>
<p>Der Bruch ist genau dann NaN, wenn sein Nenner 0 ist. Du zahlst im <code>operator==</code> drauf, weil du nicht mehr einfach Nenner und Zähler auf Gleichheit prüfen kannst, sondern du ihn so oder ähnlich implementieren musst:</p>
<pre><code class="language-cpp">bool operator== (Bruch lhs, Bruch rhs)
{
   return lhs.nenner() == 0 &amp;&amp; rhs.nenner() == 0 // beide NaN
       || lhs.nenner() == rhs.nenner() &amp;&amp; lhs.zaehler() == rhs.zaehler();
}
</code></pre>
<p>Davon abgesehen, dass zwei NaNs nie gleich sind...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161643</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 28 Dec 2011 21:07:28 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktorliste on Thu, 29 Dec 2011 18:08:58 GMT]]></title><description><![CDATA[<p>Danke Leute!</p>
<p>Ihr habt mir doch einiges weitergeholfen! Das Problem was ich mit der Konstruktorliste hatte, hab ich soweit beseitigt.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161914</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Thu, 29 Dec 2011 18:08:58 GMT</pubDate></item></channel></rss>