<?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[Template Klasse mit Überladung von Operatoren]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe hier ein kleines Verständnisproblem, ich poste mal die<br />
fragliche Klasse:</p>
<pre><code class="language-cpp">#ifndef BUFFER_H_
#define BUFFER_H_

#include &lt;iostream&gt;
template &lt;class T&gt; class Buffer
{
public:

	T *data;
	int size;

	Buffer(int size);
	~Buffer();

	Buffer&amp; operator+=(Buffer const&amp; other);
	Buffer&amp; operator=(T* _data);
	void setData(T *data);
	T&amp; operator[](int index);

};

template &lt;class T&gt;  Buffer&lt;T&gt;::Buffer(int size)
{
	this-&gt;size = size;
	data = new T[size];
}

template &lt;class T&gt; void Buffer&lt;T&gt;::setData(T* data) {

}

template &lt;class T&gt; Buffer&lt;T&gt;::~Buffer()
{

	delete[] data;
}

template &lt;class T&gt; Buffer&lt;T&gt;&amp; Buffer&lt;T&gt;::operator+=(Buffer&lt;T&gt; const&amp; other) {

	for (int i = 0; i &lt; size; i++) {

		data[i] += other.data[i];
	}

	return *this;

}

template &lt;class T&gt; Buffer&lt;T&gt;&amp; Buffer&lt;T&gt;::operator=(T* _data) {

	if (data)
		delete[] data;

	data = _data;

	return *this;

}

template &lt;class T&gt; T&amp; Buffer&lt;T&gt;::operator[](int index) {

	return data[index];
}

#endif /*BUFFER_H_*/
</code></pre>
<p>Die Verwendung der Klasse funktioniert auch einwandfrei, solange ich<br />
das Objekt nicht dynamisch erzeuge:</p>
<pre><code class="language-cpp">Buffer&lt;double&gt; foo(2);
foo[0] = 10; // funkioniert

Buffer&lt;double&gt;* bar = new Buffer&lt;double&gt;(2);

bar[0] = 10;  // Hier stürzt das Programm ab,
(*bar)[0] = 10;   // Das funktioniert aber

delete bar;
</code></pre>
<p>Sehe ich es richtig dass mit bar[0] das ganze als array von Buffer objekten interpretiert wird und versucht wird auf das erste element, nämlich einen Buffer zuzugreifen, und ich deshalb erst dereferenzieren muss ?</p>
<p>Falls ja, weswegen funktioniert das dereferenzieren hier nur geklammert ?<br />
*bar[0] gibt mir den gleichen fehler wie bar[0], (*bar)[0] hingegen passt.</p>
<p>Vielen Dank!</p>
<p>-pulse00</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/212919/template-klasse-mit-überladung-von-operatoren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 14:15:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/212919.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 May 2008 11:28:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Klasse mit Überladung von Operatoren on Mon, 12 May 2008 11:28:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe hier ein kleines Verständnisproblem, ich poste mal die<br />
fragliche Klasse:</p>
<pre><code class="language-cpp">#ifndef BUFFER_H_
#define BUFFER_H_

#include &lt;iostream&gt;
template &lt;class T&gt; class Buffer
{
public:

	T *data;
	int size;

	Buffer(int size);
	~Buffer();

	Buffer&amp; operator+=(Buffer const&amp; other);
	Buffer&amp; operator=(T* _data);
	void setData(T *data);
	T&amp; operator[](int index);

};

template &lt;class T&gt;  Buffer&lt;T&gt;::Buffer(int size)
{
	this-&gt;size = size;
	data = new T[size];
}

template &lt;class T&gt; void Buffer&lt;T&gt;::setData(T* data) {

}

template &lt;class T&gt; Buffer&lt;T&gt;::~Buffer()
{

	delete[] data;
}

template &lt;class T&gt; Buffer&lt;T&gt;&amp; Buffer&lt;T&gt;::operator+=(Buffer&lt;T&gt; const&amp; other) {

	for (int i = 0; i &lt; size; i++) {

		data[i] += other.data[i];
	}

	return *this;

}

template &lt;class T&gt; Buffer&lt;T&gt;&amp; Buffer&lt;T&gt;::operator=(T* _data) {

	if (data)
		delete[] data;

	data = _data;

	return *this;

}

template &lt;class T&gt; T&amp; Buffer&lt;T&gt;::operator[](int index) {

	return data[index];
}

#endif /*BUFFER_H_*/
</code></pre>
<p>Die Verwendung der Klasse funktioniert auch einwandfrei, solange ich<br />
das Objekt nicht dynamisch erzeuge:</p>
<pre><code class="language-cpp">Buffer&lt;double&gt; foo(2);
foo[0] = 10; // funkioniert

Buffer&lt;double&gt;* bar = new Buffer&lt;double&gt;(2);

bar[0] = 10;  // Hier stürzt das Programm ab,
(*bar)[0] = 10;   // Das funktioniert aber

delete bar;
</code></pre>
<p>Sehe ich es richtig dass mit bar[0] das ganze als array von Buffer objekten interpretiert wird und versucht wird auf das erste element, nämlich einen Buffer zuzugreifen, und ich deshalb erst dereferenzieren muss ?</p>
<p>Falls ja, weswegen funktioniert das dereferenzieren hier nur geklammert ?<br />
*bar[0] gibt mir den gleichen fehler wie bar[0], (*bar)[0] hingegen passt.</p>
<p>Vielen Dank!</p>
<p>-pulse00</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1507397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1507397</guid><dc:creator><![CDATA[pulse00]]></dc:creator><pubDate>Mon, 12 May 2008 11:28:17 GMT</pubDate></item><item><title><![CDATA[Reply to Template Klasse mit Überladung von Operatoren on Mon, 12 May 2008 11:33:02 GMT]]></title><description><![CDATA[<p>pulse00 schrieb:</p>
<blockquote>
<p>Falls ja, weswegen funktioniert das dereferenzieren hier nur geklammert ?</p>
</blockquote>
<p>Weil [] Vorrang vor * hat. Du könntest auch</p>
<pre><code class="language-cpp">bar[0][x] = 10;
</code></pre>
<p>schreiben, das dürfte aber nicht leichter zu verstehen sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1507403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1507403</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 12 May 2008 11:33:02 GMT</pubDate></item></channel></rss>