<?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[Eine Klasse als Array benutzen]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe nun schon einige Male über die Dimensionen meines Arrays hinausgeschrieben und teils sehr miese Fehler dadurch gehabt.</p>
<p>C++ bietet leider keine direkte Möglichkeit sich vor soetwas zu schützen. Daher war meine Idee um mir das Leben zu erleichtern. Ich erstelle eine Klasse myArray und überlade den [] Operator, sodass ich die Objekte wie ein Array benutzen kann. Gleichzeitig soll die Klasse bei einem Auruf von [] prüfen ob das eigentliche Array in der Klasse überhaupt groß genug für diesen Aufruf ist.</p>
<p>Hier mein Ansatz:<br />
myArray.h</p>
<pre><code>#ifndef inc_myArray_h
#define inc_myArray_h

class myArray
{
	public:
		myArray(int size);
		~myArray();

		operator [](var);

	private:
		int *_array;

};

#endif
</code></pre>
<p>myArray.cpp</p>
<pre><code>#include &quot;myArray.h&quot;

myArray::myArray(int size)
{
	_array = new int[size];
}

myArray::~myArray()
{
}
</code></pre>
<p>test.cpp</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

#include &quot;myArray.h&quot;

int main()
{

	myArray *a = new myArray(10);

	a[0] = 10;

	cout &lt;&lt; a[0];

	return 0;
}
</code></pre>
<p>MfG<br />
Scarabol</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/260244/eine-klasse-als-array-benutzen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 10:33:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/260244.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Feb 2010 18:56:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eine Klasse als Array benutzen on Tue, 02 Feb 2010 18:57:21 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe nun schon einige Male über die Dimensionen meines Arrays hinausgeschrieben und teils sehr miese Fehler dadurch gehabt.</p>
<p>C++ bietet leider keine direkte Möglichkeit sich vor soetwas zu schützen. Daher war meine Idee um mir das Leben zu erleichtern. Ich erstelle eine Klasse myArray und überlade den [] Operator, sodass ich die Objekte wie ein Array benutzen kann. Gleichzeitig soll die Klasse bei einem Auruf von [] prüfen ob das eigentliche Array in der Klasse überhaupt groß genug für diesen Aufruf ist.</p>
<p>Hier mein Ansatz:<br />
myArray.h</p>
<pre><code>#ifndef inc_myArray_h
#define inc_myArray_h

class myArray
{
	public:
		myArray(int size);
		~myArray();

		operator [](var);

	private:
		int *_array;

};

#endif
</code></pre>
<p>myArray.cpp</p>
<pre><code>#include &quot;myArray.h&quot;

myArray::myArray(int size)
{
	_array = new int[size];
}

myArray::~myArray()
{
}
</code></pre>
<p>test.cpp</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

#include &quot;myArray.h&quot;

int main()
{

	myArray *a = new myArray(10);

	a[0] = 10;

	cout &lt;&lt; a[0];

	return 0;
}
</code></pre>
<p>MfG<br />
Scarabol</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849345</guid><dc:creator><![CDATA[Scarabol]]></dc:creator><pubDate>Tue, 02 Feb 2010 18:57:21 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Klasse als Array benutzen on Tue, 02 Feb 2010 18:59:57 GMT]]></title><description><![CDATA[<p>Wieso benutzt du nicht einfach den std::vector aus der STL ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849349</guid><dc:creator><![CDATA[3121]]></dc:creator><pubDate>Tue, 02 Feb 2010 18:59:57 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Klasse als Array benutzen on Tue, 02 Feb 2010 19:05:51 GMT]]></title><description><![CDATA[<p>Was ist dein Problem? Was ist var? Der Datentyp für die Elementezahl sollte std::size_t sein. Außerdem würde ich einen (std::)Allocator für die Speicherverwaltung benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849353</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Tue, 02 Feb 2010 19:05:51 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Klasse als Array benutzen on Tue, 02 Feb 2010 19:17:52 GMT]]></title><description><![CDATA[<p>Omg, so schnell kanns gehen, std::vector kannte ich bisher noch gar nicht. Das ist genau das was ich brauche....</p>
<p>Zeigt mir das laufende Programm immer an wenn ich aus dem Array hinausschreibe?</p>
<p>MfG<br />
Scarabol</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849359</guid><dc:creator><![CDATA[Scarabol]]></dc:creator><pubDate>Tue, 02 Feb 2010 19:17:52 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Klasse als Array benutzen on Tue, 02 Feb 2010 19:19:06 GMT]]></title><description><![CDATA[<p>Für gewöhnlich kriegst du eine Fehlermeldung. Allerdings kannst du dich da nicht drauf verlassen, weil das Verhalten undefiniert ist. Es kann auch sein, dass das Programm ganz normal weiterläuft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849363</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 02 Feb 2010 19:19:06 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Klasse als Array benutzen on Tue, 02 Feb 2010 19:19:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class myArray
{
    public:
        myArray(int size){
        	_array = new int[size];
        	length = size-1;
        };
        ~myArray(){
        	delete []_array;
        };
        int &amp;operator [](int x){
        	if(x&lt;0){
        		cout &lt;&lt; &quot;underflow recovered&quot; &lt;&lt; endl;
        		x = 0;
        	}
        	if(x&gt;length){
        		cout &lt;&lt; &quot;overflow recovered&quot; &lt;&lt; endl;
        		x = length;
        	}
        	return _array[x];
        };
    private:
    	int length;
        int *_array;

};

int main(){
  myArray a(10);
  a[0] = 1;
  a[1] = 2;
  a[2] = 3;
  a[3] = 4;
  a[10] = 4;
  a[-11] = 4;

  return 0;
}
</code></pre>
<p>habs mal so versucht</p>
<p>lg lolo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849364</guid><dc:creator><![CDATA[noobLolo]]></dc:creator><pubDate>Tue, 02 Feb 2010 19:19:17 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Klasse als Array benutzen on Tue, 02 Feb 2010 19:26:58 GMT]]></title><description><![CDATA[<p>Kann man machen, ist aber imo Unsinn.</p>
<p>Was ist, wenn der Benutzer der Klasse jetzt mal keine Ausgabe auf der Konsole haben möchte, sondern z.B in ein File?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849373</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 02 Feb 2010 19:26:58 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Klasse als Array benutzen on Tue, 02 Feb 2010 19:31:05 GMT]]></title><description><![CDATA[<p>stimmt man sollte statt &quot;cout&quot; &quot;cerr&quot; verwenden, und eventuell bei unter bzw. überschreiten sofort mit einem exit(1); das teil beenden <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/1849377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849377</guid><dc:creator><![CDATA[noobLolo]]></dc:creator><pubDate>Tue, 02 Feb 2010 19:31:05 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Klasse als Array benutzen on Tue, 02 Feb 2010 19:39:56 GMT]]></title><description><![CDATA[<p>noobLolo schrieb:</p>
<blockquote>
<p>stimmt man sollte statt &quot;cout&quot; &quot;cerr&quot; verwenden, und eventuell bei unter bzw. überschreiten sofort mit einem exit(1); das teil beenden <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>
</blockquote>
<p>Damit man auch sicher nicht herausfindet, wo es gekracht hat.</p>
<p>Nein, ich würde <code>std::tr1::array</code> (bei fixen Dimensionen) oder <code>std::vector</code> bzw. einen der anderen Containertypen aus der STL nehmen, je nach Anforderung. Eine vernünftige Implementierung deckt fehlerhafte Arrayzugriffe mit Assertions ab. Und wenn man sich ganz sicher sein will oder auf die Idee kommt, dass Programmierfehler auch im Releasemodus weiterbestehen dürfen, kann man auf <code>at()</code> zurückgreifen.</p>
<p>Die Container nachzuprogrammieren halte ich für eine schlechte Idee, besonders wenn nicht wichtige Dinge wie die Regel der Grossen Drei beachtet werden. Und es gibt im Normalfall keinen Grund, nicht die Standardbibliothek (oder gegebenenfalls Boost) zu verwenden. Alleine schon bis man das Iteratorkonzept vernünftig hinbringt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849387</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 02 Feb 2010 19:39:56 GMT</pubDate></item></channel></rss>