<?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[P.roblem s.olved :)]]></title><description><![CDATA[<p>Hier meine Lösung:</p>
<p>Feld.h</p>
<pre><code class="language-cpp">/*
 * Feld.h
 *
 *  Created on: 16.09.2009
 *      Author: c.groupe
 */

#ifndef FELD_H_
#define FELD_H_

class Feld
{
		double *f;
		int groesse;

	public:
		Feld (); 							// Konstruktor
		Feld (int g);						// Konstruktor 2

		double get (int index);
		void set (int index, double wert);

		virtual ~Feld();					// Destruktor
};

#endif
</code></pre>
<p>Feld.cpp</p>
<pre><code class="language-cpp">/*
 * Feld.cpp
 *
 *  Created on: 16.09.2009
 *      Author: c.groupe
 */

#include &quot;feld.h&quot;
#include &lt;iostream&gt;
using namespace std;

Feld::Feld()
{

	groesse = 16;
	f = new double[groesse];
	for (int i=0; i&lt;groesse; ++i)
		f[i] = 0;

}

Feld::Feld(int g)
{
	groesse = g;

	if (groesse &gt; 0)
	{
		f = new double[groesse];
		for (int i=0; i&lt;groesse; ++i)
			f[i]=0;
	}
	else cout &lt;&lt; &quot;\nFehler: Feld zu klein!\n&quot;;
}

double Feld::get(int index)
{											// Lesen einen Wertes
	if((index &gt;= 0) &amp;&amp; (index &lt; groesse))
		return f[index];
	else
	{
		cerr &lt;&lt; index &lt;&lt;  &quot;\nFehler: Index Existiert nicht!\n&quot;;
		exit(-1);
	}
}

void Feld::set( int index, double wert)
{											// Wert wird hier gesetzt
	if((index &gt;= 0) &amp;&amp; (index &lt; groesse))
			f[index] = wert;
	else
		{
			cerr &lt;&lt; index &lt;&lt; &quot;\nFehler: Index Falsch!\n&quot;;
			exit(-1);
		}
}

Feld::~Feld()
{
	delete[] f;
}
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">/*
 * Main.cpp
 *
 *  Created on: 14.09.2009
 *      Author: c.groupe
 */

#include &quot;feld.h&quot;
#include &lt;iostream&gt;
using namespace std;

int main()
{
	double i;

	Feld v1(12), v2;

	v1.set(2, 4.3);
	i = v1.get(2);
	cout &lt;&lt; i &lt;&lt; '\n';

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/250352/p-roblem-s-olved</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 02:23:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/250352.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Sep 2009 22:01:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to P.roblem s.olved :) on Sun, 07 Feb 2010 14:43:31 GMT]]></title><description><![CDATA[<p>Hier meine Lösung:</p>
<p>Feld.h</p>
<pre><code class="language-cpp">/*
 * Feld.h
 *
 *  Created on: 16.09.2009
 *      Author: c.groupe
 */

#ifndef FELD_H_
#define FELD_H_

class Feld
{
		double *f;
		int groesse;

	public:
		Feld (); 							// Konstruktor
		Feld (int g);						// Konstruktor 2

		double get (int index);
		void set (int index, double wert);

		virtual ~Feld();					// Destruktor
};

#endif
</code></pre>
<p>Feld.cpp</p>
<pre><code class="language-cpp">/*
 * Feld.cpp
 *
 *  Created on: 16.09.2009
 *      Author: c.groupe
 */

#include &quot;feld.h&quot;
#include &lt;iostream&gt;
using namespace std;

Feld::Feld()
{

	groesse = 16;
	f = new double[groesse];
	for (int i=0; i&lt;groesse; ++i)
		f[i] = 0;

}

Feld::Feld(int g)
{
	groesse = g;

	if (groesse &gt; 0)
	{
		f = new double[groesse];
		for (int i=0; i&lt;groesse; ++i)
			f[i]=0;
	}
	else cout &lt;&lt; &quot;\nFehler: Feld zu klein!\n&quot;;
}

double Feld::get(int index)
{											// Lesen einen Wertes
	if((index &gt;= 0) &amp;&amp; (index &lt; groesse))
		return f[index];
	else
	{
		cerr &lt;&lt; index &lt;&lt;  &quot;\nFehler: Index Existiert nicht!\n&quot;;
		exit(-1);
	}
}

void Feld::set( int index, double wert)
{											// Wert wird hier gesetzt
	if((index &gt;= 0) &amp;&amp; (index &lt; groesse))
			f[index] = wert;
	else
		{
			cerr &lt;&lt; index &lt;&lt; &quot;\nFehler: Index Falsch!\n&quot;;
			exit(-1);
		}
}

Feld::~Feld()
{
	delete[] f;
}
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">/*
 * Main.cpp
 *
 *  Created on: 14.09.2009
 *      Author: c.groupe
 */

#include &quot;feld.h&quot;
#include &lt;iostream&gt;
using namespace std;

int main()
{
	double i;

	Feld v1(12), v2;

	v1.set(2, 4.3);
	i = v1.get(2);
	cout &lt;&lt; i &lt;&lt; '\n';

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1780150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780150</guid><dc:creator><![CDATA[c.groupe]]></dc:creator><pubDate>Sun, 07 Feb 2010 14:43:31 GMT</pubDate></item><item><title><![CDATA[Reply to P.roblem s.olved :) on Wed, 16 Sep 2009 22:45:06 GMT]]></title><description><![CDATA[<p>Sieht ziemlich gut aus. Zwei Bemerkungen (Pukte 1 und 3) und einen Fehler (Punkt 2) habe ich:</p>
<ol>
<li>Man kann Funktionen Standardwerte mitgeben, die für den Fall genommen werden, dass kein Wert angegeben wird. Auf diese Weise kannst du dir den Fall wo kein Argument angegeben wird sparen. Man schreibt dies so:</li>
</ol>
<pre><code class="language-cpp">Feld (int g=16);
</code></pre>
<ol start="2">
<li></li>
</ol>
<pre><code class="language-cpp">Feld::~Feld()
{
	delete[] f;
}
</code></pre>
<p>Du hast richtig erkannt, dass du einen eigenen Destruktor für die Klasse brauchst. Aber überleg nochmal, was passiert, wenn ein Objekt der Klasse kopiert werden soll.<br />
Kleiner Tipp: Es gibt für C++ eine Faustregel (die sogenannte <em>Regel der großen Drei</em> oder auch einfach <a href="http://de.wikipedia.org/wiki/Dreierregel_%28C%2B%2B%29" rel="nofollow">Dreierregel</a>), die besagt, dass eine Klasse die eine der folgenden Methoden benötigt, auch die anderen beiden benötigt:</p>
<ul>
<li>Kopierkonstruktor</li>
<li>Destruktor</li>
<li>Zuweisungsoperator</li>
</ul>
<p>Diese Regel trifft hier zu.</p>
<ol start="3">
<li>Ich weiß nicht, ob es in deinem Buch schon vorgekommen ist: Es gibt auch vorzeichenlose Zahlentypen (unsigned int). Da negative Feldgrößen unsinnig sind könntest du diese benutzen.<br />
&quot;Feld zu klein!&quot; ist wohl eher ein Fall für cerr als cout, wie die anderen Fehler auch.</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/1780167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780167</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 16 Sep 2009 22:45:06 GMT</pubDate></item><item><title><![CDATA[Reply to P.roblem s.olved :) on Wed, 16 Sep 2009 22:47:03 GMT]]></title><description><![CDATA[<p>Das sieht soweit ganz gut aus. Ich würde ein paar kleinere Sachen ändern:</p>
<p>-Als Typ für die größe würde ich unsigned int oder size_t nehmen, um anzuzeigen, dass es ein Vorzeichenloser Typ ist.</p>
<p>-Den Konstruktor würde ich so definieren</p>
<pre><code class="language-cpp">Feld( int g = 16 )
{
}
</code></pre>
<p>Das vermeidet Codedopplung und ist eine gängige Methode.</p>
<p>-Falls beim Konstruktor die Größe 0 übergeben wird, kannst du das eigentlich zulassen.</p>
<p>-die get Methode kannst du als konstante Methode implementieren</p>
<p>-und warum ist der Destruktor virtuell? Ist in dem Falle unnötig</p>
<p>-beim Setzen des feldes könntest du 0.0 satt 0 benutzen <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>
<p>-wenn du schon den Destruktor implementierst, warum dann nicht gleich auch noch den copy constructor? <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/1780169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780169</guid><dc:creator><![CDATA[sdfsdf]]></dc:creator><pubDate>Wed, 16 Sep 2009 22:47:03 GMT</pubDate></item><item><title><![CDATA[Reply to P.roblem s.olved :) on Thu, 17 Sep 2009 08:03:59 GMT]]></title><description><![CDATA[<p>Vielen Dank fürs drüber schauen!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>, ok werd ich mir dann mal anschauen.</p>
<p>@sdfsdf, der grund liegt darin, dass ich kein perfektes programm schreiben will,<br />
sondern einfach erst mal nur die geforderte aufgabe lösen <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/1780243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780243</guid><dc:creator><![CDATA[c.groupe]]></dc:creator><pubDate>Thu, 17 Sep 2009 08:03:59 GMT</pubDate></item><item><title><![CDATA[Reply to P.roblem s.olved :) on Thu, 17 Sep 2009 09:30:06 GMT]]></title><description><![CDATA[<p>Ich würde<br />
- den Konstruktor noch explizit machen, um zu verhindern, dass ein int implizit zu einem Feld konvertierbar wird.<br />
- Kopieren und Zuweisung entweder erlauben und richtig implementiereun oder verbieten. In deinem Fall generiert der Compiler automatisch Kopier-Konstruktor und Zuweisungsoperator. Diese tun aber nicht das richtige. Siehe <a href="http://de.wikipedia.org/wiki/Dreierregel_(C%2B%2B)" rel="nofollow">Dreierregel</a></p>
<p>Das, was du hier als &quot;nicht perfekt&quot; bezeichnest ist strenggenommen keine brauchbare Lösung. Zuweisung und Kopieren wird bei Dir erlaubt, geht aber nach hinten los. Also, schreibe entweder</p>
<pre><code class="language-cpp">// boost::noncopyable verhindert, dass der Compiler einen eigenen
// Kopier-Konstruktor und Zuweisungoperator erzeugt. Die würden
// nämlich das falsche machen (einfach den Zeiger kopieren)
class Feld : boost::noncopyable
{
  explicit Feld(int groesse = 16);
  ~Feld(); // Destruktor muss nicht virtual sein
};
</code></pre>
<p>(boost::noncopyable findest Du <a href="http://www.boost.org/doc/libs/1_40_0/libs/utility/utility.htm#Class_noncopyable" rel="nofollow">hier</a>)<br />
oder</p>
<pre><code class="language-cpp">class Feld
{
public:
  explicit Feld(int groesse = 16);
  Feld(Feld const&amp;); // eigener Kopier-Konstruktor
  Feld&amp; operator=(Feld const&amp;); // eigener Zuweisungsoperator
  ~Feld(); // Destruktor muss nicht virtual sein
};
</code></pre>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1780292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780292</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Thu, 17 Sep 2009 09:30:06 GMT</pubDate></item><item><title><![CDATA[Reply to P.roblem s.olved :) on Thu, 17 Sep 2009 12:36:45 GMT]]></title><description><![CDATA[<p>dann kann er eigentlich im konstruktor auch mit der initialisierungsliste arbeiten</p>
<pre><code class="language-cpp">Feld(int g = 16) : f( (g&gt;=0) ? new double[g] : NULL ), groesse(g) { if(!g)cerr&lt;&lt;&quot;Fehler&quot;; }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1780427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780427</guid><dc:creator><![CDATA[sdfsdf]]></dc:creator><pubDate>Thu, 17 Sep 2009 12:36:45 GMT</pubDate></item></channel></rss>