<?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[Klassen und Arrays]]></title><description><![CDATA[<p>Heyho, ich hab da mal ne Frage.<br />
Und zwar programmiere ich grade snake (oder will anfangen <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="😉"
    /> ) und hab mir eine Klasse Feld erzeugt. So jetzt wollte ich eigenlich ein mehrdem. Array nehmen und damit das Spielfeld konstruieren. So jetzt hab ich aber ein Problem...</p>
<p>[cpp]<br />
class CFeld<br />
{<br />
private:<br />
int x;<br />
int y;</p>
<p>int Array[x][y];</p>
<p>public:<br />
CFeld();<br />
};</p>
<p>//bla<br />
//bla</p>
<p>//So der Konstrucktor<br />
//<br />
CFeld::CFeld ()<br />
{<br />
x=15;<br />
y=10;<br />
}</p>
<p>versteht ihr was ich meine?<br />
gibt es eine möglichkeit wie ich die groeße des Arrays mit der x y variable bestimmen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/252634/klassen-und-arrays</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 07:28:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/252634.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Oct 2009 15:48:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 15:48:54 GMT]]></title><description><![CDATA[<p>Heyho, ich hab da mal ne Frage.<br />
Und zwar programmiere ich grade snake (oder will anfangen <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="😉"
    /> ) und hab mir eine Klasse Feld erzeugt. So jetzt wollte ich eigenlich ein mehrdem. Array nehmen und damit das Spielfeld konstruieren. So jetzt hab ich aber ein Problem...</p>
<p>[cpp]<br />
class CFeld<br />
{<br />
private:<br />
int x;<br />
int y;</p>
<p>int Array[x][y];</p>
<p>public:<br />
CFeld();<br />
};</p>
<p>//bla<br />
//bla</p>
<p>//So der Konstrucktor<br />
//<br />
CFeld::CFeld ()<br />
{<br />
x=15;<br />
y=10;<br />
}</p>
<p>versteht ihr was ich meine?<br />
gibt es eine möglichkeit wie ich die groeße des Arrays mit der x y variable bestimmen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796474</guid><dc:creator><![CDATA[Joker232]]></dc:creator><pubDate>Thu, 22 Oct 2009 15:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 16:12:40 GMT]]></title><description><![CDATA[<p>Entweder legst du das Array dynamisch an oder nimmst ein Klassen-Template:</p>
<pre><code class="language-cpp">template&lt;int XSIZE, int YSIZE&gt; class CFeld
{
int Array[XSIZE][YSIZE];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1796490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796490</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Thu, 22 Oct 2009 16:12:40 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 16:15:59 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int* feld = new int[x][y];
feld[0][0] = ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1796491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796491</guid><dc:creator><![CDATA[s91x]]></dc:creator><pubDate>Thu, 22 Oct 2009 16:15:59 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 16:17:28 GMT]]></title><description><![CDATA[<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796494</guid><dc:creator><![CDATA[Joker232]]></dc:creator><pubDate>Thu, 22 Oct 2009 16:17:28 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 16:17:42 GMT]]></title><description><![CDATA[<p>Wenn sowieso nur eine Spielfeldgrösse existiert und diese auch zur Compilezeit bekannt ist, braucht man den Umweg über Templates (von denen ich vermute, dass sie der Threadersteller noch nicht kennt) nicht zu gehen. <code>const</code> -Variablen reichen dafür aus.</p>
<pre><code class="language-cpp">class Feld
{
    static const int Laenge = 35;
    static const int Breite = 20;

    int Array[Laenge][Breite];
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1796496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796496</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 22 Oct 2009 16:17:42 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 16:19:14 GMT]]></title><description><![CDATA[<p>Die Größe von statischen Arrays muss zur Compilezeit feststehen. Tut sie dass nicht, musst du mit dynamischen Strukturen arbeiten (d.h. new und delete benutzen). Wenn ich mir aber dein Programm so angucke, vermute ich mal, dass dein Spielfeld immer gleich groß sein soll und du einfach nicht weißt, wie man in C++ Konstanten und statische Member benutzt. In letzterem Fall könntest du dann folgendes machen:</p>
<pre><code class="language-cpp">class CFeld
{
private:
static const int x=15;
static const int y=10;

int Array[x][y];
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1796497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796497</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 22 Oct 2009 16:19:14 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 16:33:00 GMT]]></title><description><![CDATA[<p>wx++ schrieb:</p>
<blockquote>
<p>Entweder legst du das Array dynamisch an oder nimmst ein Klassen-Template:</p>
<pre><code class="language-cpp">template&lt;int XSIZE, int YSIZE&gt; class CFeld
{
int Array[XSIZE][YSIZE];
}
</code></pre>
</blockquote>
<p>muss man da was mit std::allocator mache?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796511</guid><dc:creator><![CDATA[template n00b]]></dc:creator><pubDate>Thu, 22 Oct 2009 16:33:00 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 16:41:38 GMT]]></title><description><![CDATA[<p>template n00b schrieb:</p>
<blockquote>
<p>muss man da was mit std::allocator mache?</p>
</blockquote>
<p>Nein (aber man könnte natürlich). Wie kommst du darauf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796517</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 22 Oct 2009 16:41:38 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 16:55:20 GMT]]></title><description><![CDATA[<p>weil mich interessiert, wie das geht.<br />
evtl. will ich mal eine kleine 3d bitmap bibliothek anfangen zu programmieren.</p>
<p>mit meinem jetztigen kenntnisstand hätte ich es so gemacht:</p>
<pre><code class="language-cpp">class CFeld 
{ 
	private: 
		int* Array;
		unsigned x, y;
		void ChkXY ( unsigned x, unsigned y ){
			if ( x &gt; this-&gt;x || y &gt; this-&gt;y )
				cout &lt;&lt; endl &lt;&lt; &quot;Touch too much!&quot; &lt;&lt; endl;
			assert ( x &lt; this-&gt;x &amp;&amp; y &lt; this-&gt;y );
		}

	public: 
		CFeld( unsigned x, unsigned y ); 
		int GetValue( unsigned x, unsigned y );
		void SetValue ( unsigned x, unsigned y, int value );
}; 

CFeld::CFeld ( unsigned x, unsigned y ) 
{ 
	this-&gt;x = x;
	this-&gt;y = y;
	Array = new int [x*y];
	for ( unsigned i = 0; i &lt; x*y; i++ )
		Array[i] = 0;
} 

void CFeld::SetValue ( unsigned x, unsigned y, int value )
{
	ChkXY ( x, y );
	Array[y*this-&gt;x+x] = value;
}

int CFeld::GetValue ( unsigned x, unsigned y )
{
	ChkXY ( x, y );
	return Array[y*this-&gt;x+x];
}

int main()
{
	CFeld cfeld ( 8, 8 );
	cfeld.SetValue( 4, 6, 99 );
	cout &lt;&lt; cfeld.GetValue ( 4, 6 );

	cout &lt;&lt; cfeld.GetValue ( 666, 999 );

	return 0;
}
</code></pre>
<p>nu dacht ich wäre vllt. besser, sprachmittel von c++ zu kennen, die das irgendwie ... hmm ... einfacher machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796532</guid><dc:creator><![CDATA[template n00b]]></dc:creator><pubDate>Thu, 22 Oct 2009 16:55:20 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 17:52:03 GMT]]></title><description><![CDATA[<p>template n00b schrieb:</p>
<blockquote>
<p>nu dacht ich wäre vllt. besser, sprachmittel von c++ zu kennen, die das irgendwie ... hmm ... einfacher machen?</p>
</blockquote>
<p>Definitiv. Ein sehr essentieller Bestandteil der C++-Standardbibliothek ist die Standard Template Library (STL). Diese bietet Container und Algorithmen an, welche dir mühsame Dinge wie manuelle Speicherverwaltung abnehmen, ein sehr komfortables Interface anbieten und dir erlauben, zu abstrahieren und dich auf die wirklich wichtigen Dinge zu konzentrieren.</p>
<p>Als Einführung kann ich dir <a href="http://magazin.c-plusplus.net/artikel/Aufbau%20der%20STL%20-%20Teil%201%3A%20Container" rel="nofollow">diesen Artikel</a> des C++-Forenmagazins empfehlen. Auch Teil 2 und 3 sowie andere Artikel (z.B. über Templates, Zeiger) solltest du dir unbedingt genauer unter die Lupe nehmen.</p>
<p>P.S.: Mit deiner jetzigen Klasse hast du ein Memory Leak, da du den von <code>new</code> angeforderten Speicher nicht freigibst. Ausserdem kommt es zu Problemen, wenn Instanzen kopiert oder zugewiesen werden, da diese dann auf den gleichen Speicher verweisen. Zwei weitere Fehler, die durch die Verwendung der STL stark eingeschränkt werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796592</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 22 Oct 2009 17:52:03 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 18:38:23 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>P.S.: Mit deiner jetzigen Klasse hast du ein Memory Leak, da du den von new angeforderten Speicher nicht freigibst. Ausserdem kommt es zu Problemen, wenn Instanzen kopiert oder zugewiesen werden, da diese dann auf den gleichen Speicher verweisen. Zwei weitere Fehler, die durch die Verwendung der STL stark eingeschränkt werden können.</p>
</blockquote>
<p>stimmt, hätte wenigstens den destruktor noch mit reinbauen sollen</p>
<pre><code class="language-cpp">CFeld::~CFeld()
{
 delete [] Array;
}
</code></pre>
<p>zuweisungsoperator und kopierkonstruktor würde ich auch noch hinbekommen, aber wie würde ich da mit templates rangehen: gibt es da was fertiges oder müsste ich das selber schreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796620</guid><dc:creator><![CDATA[CFeld__~CFeld()]]></dc:creator><pubDate>Thu, 22 Oct 2009 18:38:23 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 19:02:01 GMT]]></title><description><![CDATA[<p>CFeld__~CFeld() schrieb:</p>
<blockquote>
<p>zuweisungsoperator und kopierkonstruktor würde ich auch noch hinbekommen, aber wie würde ich da mit templates rangehen: gibt es da was fertiges oder müsste ich das selber schreiben?</p>
</blockquote>
<p>Wenn du selbstverwaltende Objekte als Member hast - also <em>keine</em> rohen besitzenden Zeiger, sondern z.B. Container - brauchst du weder Destruktor, noch Kopierkonstruktor, noch Zuweisungsoperator selbst zu implementieren. Die compilergenerierten Funktionen reichen da völlig aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796642</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 22 Oct 2009 19:02:01 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 19:19:10 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>CFeld__~CFeld() schrieb:</p>
<blockquote>
<p>zuweisungsoperator und kopierkonstruktor würde ich auch noch hinbekommen, aber wie würde ich da mit templates rangehen: gibt es da was fertiges oder müsste ich das selber schreiben?</p>
</blockquote>
<p>Wenn du selbstverwaltende Objekte als Member hast - also <em>keine</em> rohen besitzenden Zeiger, sondern z.B. Container - brauchst du weder Destruktor, noch Kopierkonstruktor, noch Zuweisungsoperator selbst zu implementieren. Die compilergenerierten Funktionen reichen da völlig aus.</p>
</blockquote>
<p>Es gibt eine Ausnahme: wenn starke Exceptionsicherheit benötigt wird und die Zuweisung eines Members (außer des Ersten bzw. der ersten Basisklasse) eine Exception werfen kann. Dann muss der Zuweisungsoperator trotzdem selbst definiert werden.<br />
Die Standardcontainer bieten selbst nur die schwache Garantie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796660</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 22 Oct 2009 19:19:10 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 19:26:31 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wenn du selbstverwaltende Objekte als Member hast - also <em>keine</em> rohen besitzenden Zeiger, sondern z.B. Container - brauchst du weder Destruktor, noch Kopierkonstruktor, noch Zuweisungsoperator selbst zu implementieren. Die compilergenerierten Funktionen reichen da völlig aus.</p>
</blockquote>
<p>ja, das ist mir bekannt :). bleibt für mich noch die frage ungeklärt, ob es zum erzeugen von 2d/3d koordinaten-arrays fertige c++ klassen gibt.<br />
was ist mit dem vorschlag von wx++:</p>
<p>wx++ schrieb:</p>
<blockquote>
<p>Entweder legst du das Array dynamisch an oder nimmst ein Klassen-Template:</p>
<pre><code class="language-cpp">template&lt;int XSIZE, int YSIZE&gt; class CFeld
{
int Array[XSIZE][YSIZE];
}
</code></pre>
</blockquote>
<p>wäre das eine vereinfachung gegenüber meinem ansatz?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796667</guid><dc:creator><![CDATA[template n00b]]></dc:creator><pubDate>Thu, 22 Oct 2009 19:26:31 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 19:45:10 GMT]]></title><description><![CDATA[<p><a href="http://www.boost.org/doc/libs/1_40_0/libs/multi_array/doc/index.html" rel="nofollow">boost.multiarray</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796687</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 22 Oct 2009 19:45:10 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Arrays on Thu, 22 Oct 2009 20:05:12 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p><a href="http://www.boost.org/doc/libs/1_40_0/libs/multi_array/doc/index.html" rel="nofollow">boost.multiarray</a></p>
</blockquote>
<p>guck ich mir an,<br />
danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796709</guid><dc:creator><![CDATA[template n00b]]></dc:creator><pubDate>Thu, 22 Oct 2009 20:05:12 GMT</pubDate></item></channel></rss>