<?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[operator [] Überladung]]></title><description><![CDATA[<p>Hallo helfende Hände,<br />
ich finde leider keine Lösung und bitte um Hilfe.</p>
<p>Die Aufgabe ist.<br />
Stelle const und nicht const Versionen des operator[] zur Verfügung.<br />
Leider weis ich nicht wie ich das Anfangen soll.<br />
Und kann mir mal einer sagen wie ich den Code hier in ein anderes Fenster einfüge ?<br />
Danke!!</p>
<p>Ich hab da mal einen Link gesetzt bitte nehmt euch mal der Sache an.</p>
<p><a href="http://ideone.com/e.js/1STHDM" rel="nofollow">http://ideone.com/e.js/1STHDM</a></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

//---------------------------------------------Aufgabe 1------------------------------------------------------------------------------
template&lt;class T&gt; struct S
{
private:
	T val;

public:
	S(T t) :val(t){}
	S(){}

	//--------------------------------------------------------------------

	T&amp; get()
	{
		return val;
	}

	void set(T t)
	{
		val = t;
	}

	S operator=(const T&amp; tt)
	{
		val = tt;
		return *this;
	}

	istream&amp; operator&gt;&gt;(istream&amp; is)
	{
		is &gt;&gt; val;
		return is;
	}

	/*T&amp; operator[](int i) // auch ein Versuch aber ohne Erforlg
	{
	return this.val[i];
	/*int b = 0;
	T* ptr = &amp;val;
	vector&lt;T&gt;c;
	//while (*ptr){ c.push_back(val); ptr++; }
	//cout &lt;&lt; &quot;0 &quot; &lt;&lt; *ptr &lt;&lt; &quot; 1 &quot; &lt;&lt; *ptr  &lt;&lt; endl;
	//ptr+=i;
	return c[i] ;*/

	T&amp; operator =(T&amp; x)
	{
		return x;
	}

	T&amp; operator[](int i = 0) // hier komme ich nicht weiter
	{
		vector&lt;T&gt; t;
		t.push_back(get());

		return t[0][i];
	}

};

template&lt;class N&gt;
ostream&amp; operator&lt;&lt;(ostream&amp; os, vector&lt;N&gt;&amp; s)
{

	for (auto iter = s.begin(); iter != s.end(); ++iter)
		os &lt;&lt; &quot;-&quot; &lt;&lt; *iter;
	return os;
}

template&lt;class N&gt;
ostream&amp; operator&lt;&lt;(ostream&amp; os, S&lt;N&gt; c)
{
	os &lt;&lt; c.get();
	return os;
}

//---------------------------------------------Aufgabe 3------------------------------------------------------------------------------
int main()
{
	vector&lt;int&gt;vi{ 0, 1, 2, 3, 4, 5, 6, 7 };
	S&lt;int&gt;sint = 1;
	S&lt;char&gt;scha = '2';
	S&lt;double&gt;sdou = 1.2;
	S&lt;vector&lt;int&gt;&gt;v(vi);

	cout &lt;&lt; sint;
	cout &lt;&lt; scha;
	cout &lt;&lt; sdou;
	cout &lt;&lt; v;
	// soweit so gut aber hier komme ich nicht weiter

	//cout&lt;&lt;&quot;Wert &quot; &lt;&lt; v[2]&lt;&lt;endl;

	char ch;
	cin &gt;&gt; ch;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/331317/operator-überladung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 01 May 2026 17:38:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331317.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 21 Feb 2015 21:09:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 11:46:00 GMT]]></title><description><![CDATA[<p>Hallo helfende Hände,<br />
ich finde leider keine Lösung und bitte um Hilfe.</p>
<p>Die Aufgabe ist.<br />
Stelle const und nicht const Versionen des operator[] zur Verfügung.<br />
Leider weis ich nicht wie ich das Anfangen soll.<br />
Und kann mir mal einer sagen wie ich den Code hier in ein anderes Fenster einfüge ?<br />
Danke!!</p>
<p>Ich hab da mal einen Link gesetzt bitte nehmt euch mal der Sache an.</p>
<p><a href="http://ideone.com/e.js/1STHDM" rel="nofollow">http://ideone.com/e.js/1STHDM</a></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

//---------------------------------------------Aufgabe 1------------------------------------------------------------------------------
template&lt;class T&gt; struct S
{
private:
	T val;

public:
	S(T t) :val(t){}
	S(){}

	//--------------------------------------------------------------------

	T&amp; get()
	{
		return val;
	}

	void set(T t)
	{
		val = t;
	}

	S operator=(const T&amp; tt)
	{
		val = tt;
		return *this;
	}

	istream&amp; operator&gt;&gt;(istream&amp; is)
	{
		is &gt;&gt; val;
		return is;
	}

	/*T&amp; operator[](int i) // auch ein Versuch aber ohne Erforlg
	{
	return this.val[i];
	/*int b = 0;
	T* ptr = &amp;val;
	vector&lt;T&gt;c;
	//while (*ptr){ c.push_back(val); ptr++; }
	//cout &lt;&lt; &quot;0 &quot; &lt;&lt; *ptr &lt;&lt; &quot; 1 &quot; &lt;&lt; *ptr  &lt;&lt; endl;
	//ptr+=i;
	return c[i] ;*/

	T&amp; operator =(T&amp; x)
	{
		return x;
	}

	T&amp; operator[](int i = 0) // hier komme ich nicht weiter
	{
		vector&lt;T&gt; t;
		t.push_back(get());

		return t[0][i];
	}

};

template&lt;class N&gt;
ostream&amp; operator&lt;&lt;(ostream&amp; os, vector&lt;N&gt;&amp; s)
{

	for (auto iter = s.begin(); iter != s.end(); ++iter)
		os &lt;&lt; &quot;-&quot; &lt;&lt; *iter;
	return os;
}

template&lt;class N&gt;
ostream&amp; operator&lt;&lt;(ostream&amp; os, S&lt;N&gt; c)
{
	os &lt;&lt; c.get();
	return os;
}

//---------------------------------------------Aufgabe 3------------------------------------------------------------------------------
int main()
{
	vector&lt;int&gt;vi{ 0, 1, 2, 3, 4, 5, 6, 7 };
	S&lt;int&gt;sint = 1;
	S&lt;char&gt;scha = '2';
	S&lt;double&gt;sdou = 1.2;
	S&lt;vector&lt;int&gt;&gt;v(vi);

	cout &lt;&lt; sint;
	cout &lt;&lt; scha;
	cout &lt;&lt; sdou;
	cout &lt;&lt; v;
	// soweit so gut aber hier komme ich nicht weiter

	//cout&lt;&lt;&quot;Wert &quot; &lt;&lt; v[2]&lt;&lt;endl;

	char ch;
	cin &gt;&gt; ch;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2443741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443741</guid><dc:creator><![CDATA[utass]]></dc:creator><pubDate>Sun, 22 Feb 2015 11:46:00 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sat, 21 Feb 2015 22:40:30 GMT]]></title><description><![CDATA[<p>Du kannst die Funktionen mehrfach überladen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443749</guid><dc:creator><![CDATA[Erleuchter]]></dc:creator><pubDate>Sat, 21 Feb 2015 22:40:30 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 11:29:56 GMT]]></title><description><![CDATA[<p>Danke Erleuchter !<br />
aber ich brauche den Operator [] ja nur für Vectoren in S.<br />
Wie meinst Du das ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443778</guid><dc:creator><![CDATA[utass]]></dc:creator><pubDate>Sun, 22 Feb 2015 11:29:56 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 11:39:02 GMT]]></title><description><![CDATA[<p>Ich seh nix.<br />
Code fügst Du zwischen cpp-Tags ein:</p>
<p>Musst halt in der Vorschau schauen, wie es aussieht.<br />
Dass und wie man seinen Beitrag editieren kann, weisst Du ja offensichtlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443779</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sun, 22 Feb 2015 11:39:02 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 11:46:56 GMT]]></title><description><![CDATA[<p>Danke Furble Wurble ! <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/2443781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443781</guid><dc:creator><![CDATA[utass]]></dc:creator><pubDate>Sun, 22 Feb 2015 11:46:56 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 12:12:02 GMT]]></title><description><![CDATA[<p>Ahh...<br />
Wie das prinzipell mit der Überladung und const funktioniert ist Dir klar?!<br />
Z.B. könnte ich Dich bitten eine const Überladung von <code>S::get()</code> zu erstellen?</p>
<p>Vielleicht in diesem Minimalbeispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;typename T&gt;
class S {
  T m_val;
public:
  S(const T&amp; t)
    : m_val(t) { }
  T&amp; get() { return m_val; }
};

using namespace std;

int main(){
  S&lt;int&gt; s(31415);
  cout &lt;&lt; s.get() &lt;&lt; endl;

  const S&lt;int&gt; s1(42);
  cout &lt;&lt; s1.get() &lt;&lt; endl;  // kompiliert nicht!?
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2443783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443783</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sun, 22 Feb 2015 12:12:02 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 12:48:57 GMT]]></title><description><![CDATA[<p>ich stehe mit const noch ein wenig Kriegsfuss <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="😉"
    /><br />
und Überladen von Funktionen sollte wenn ich jetzt mal nicht nachlese das<br />
nutzen von gleichen Funktionsnamen mit unterschiedlichen deklarierten Variablen sein so das sich der Compiler die passende Funktion raussuchen kann.</p>
<p>Also eigentlich so wie beim Ausgabeoperator oder ?</p>
<p>zu const</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

//---------------------------------------------Aufgabe 1------------------------------------------------------------------------------
template&lt;class T&gt; struct S
{
private:
	T val;

public:
	S(const T t) :val(t){}  // GEAENDERT
	S(){}

	//--------------------------------------------------------------------

	T&amp; get()
	{
		return val;
	}
	const T&amp; get() const   // EINGEFUEGT
	{
		return val;
	}

	void set(T t)
	{
		val = t;
	}

	S operator=(const T&amp; tt)
	{
		val = tt;
		return *this;
	}

	istream&amp; operator&gt;&gt;(istream&amp; is)
	{
		is &gt;&gt; val;
		return is;
	}

	/*T&amp; operator[](int i) // auch ein Versuch aber ohne Erforlg
	{
	return this.val[i];
	/*int b = 0;
	T* ptr = &amp;val;
	vector&lt;T&gt;c;
	//while (*ptr){ c.push_back(val); ptr++; }
	//cout &lt;&lt; &quot;0 &quot; &lt;&lt; *ptr &lt;&lt; &quot; 1 &quot; &lt;&lt; *ptr  &lt;&lt; endl;
	//ptr+=i;
	return c[i] ;*/

	T&amp; operator =(T&amp; x)
	{
		return x;
	}

};

/*template&lt;class A&gt;
A&amp;  operator[](int i ,vector&lt;A&gt;&amp; gv) // hier komme ich nicht weiter
{
	return gv[i];
}

template&lt;class G&gt;
G&amp;  operator[](const S&lt;G&gt; c)
{
	return c.get();
}
*/
template&lt;class N&gt;
ostream&amp; operator&lt;&lt;(ostream&amp; os, vector&lt;N&gt;&amp; s)
{
    for (auto iter = s.begin(); iter != s.end(); ++iter)
		   os &lt;&lt; &quot;-&quot; &lt;&lt; *iter;
	return os;
}

template&lt;class N&gt;
ostream&amp; operator&lt;&lt;(ostream&amp; os, S&lt;N&gt; c)
{
	os &lt;&lt; c.get() &lt;&lt; endl;
	return os;
}

//---------------------------------------------Aufgabe 3------------------------------------------------------------------------------
int main()
{
	vector&lt;int&gt;vi{ 0, 1, 2, 3, 4, 5, 6, 7 };
	S&lt;int&gt;sint = 1;
	S&lt;char&gt;scha = '2';
	S&lt;double&gt;sdou = 1.2;
	S&lt;vector&lt;int&gt;&gt;v(vi);
	const S&lt;int&gt; ci = 9;   // EINGEFUEGT

	cout &lt;&lt; ci.get()&lt;&lt;endl; // EINGEFUEGT
	cout &lt;&lt; sint;
	cout &lt;&lt; scha;
	cout &lt;&lt; sdou;
	cout &lt;&lt; v;
	// soweit so gut aber hier komme ich nicht weiter

	//cout&lt;&lt;&quot;Wert &quot; &lt;&lt; v[2]&lt;&lt;endl;

	char ch;
	cin &gt;&gt; ch;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2443786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443786</guid><dc:creator><![CDATA[utass]]></dc:creator><pubDate>Sun, 22 Feb 2015 12:48:57 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 12:59:53 GMT]]></title><description><![CDATA[<p>utass schrieb:</p>
<blockquote>
<p>ich stehe mit const noch ein wenig Kriegsfuss <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>Sonst hättest Du wohl kaum gepostet...</p>
<p>Das mit dem <code>S::get()</code> hat aber sehr gut geklappt. Und ja: das mit dem Ausgabeoperator funktioniert sogut weil man ihn überladen kann.<br />
So &quot;auf Kriegsfuß&quot; kannste also nicht mit const stehen...</p>
<p>Frage:<br />
Was soll denn der <code>S::operator[]</code> machen?<br />
Generell verstehe ich S nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443789</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sun, 22 Feb 2015 12:59:53 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 13:01:32 GMT]]></title><description><![CDATA[<p>Ich versuche mich nebenbei weiter an dem Operator<br />
aber im Moment bekomme ich die Fehlermeldung<br />
Operator [] muss ein nicht statischer Member sein<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443791</guid><dc:creator><![CDATA[utass]]></dc:creator><pubDate>Sun, 22 Feb 2015 13:01:32 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 13:16:40 GMT]]></title><description><![CDATA[<p>S ist für mich eine Aufgabenstellung um Template zu verstehen.<br />
Nun habe ich die Aufgabe gehabt als Typ Vektor in S definieren so wie ich ja auch Klassen einfügen kann.<br />
Die Hauptaufgabe bei der ich nicht weiter komme ist das ich auf den Vector den ich in S deklariert habe Indizierten Zugriff erreichen soll.<br />
Damit tue ich mich schwer weil ich auch noch nicht verstanden habe wie ich einen<br />
2 dimensionalen Vector beschreibe und auslese.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443795</guid><dc:creator><![CDATA[utass]]></dc:creator><pubDate>Sun, 22 Feb 2015 13:16:40 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 13:33:22 GMT]]></title><description><![CDATA[<p>utass schrieb:</p>
<blockquote>
<p>S ist für mich eine Aufgabenstellung um Template zu verstehen.<br />
Nun habe ich die Aufgabe gehabt als Typ Vektor in S definieren so wie ich ja auch Klassen einfügen kann.<br />
Die Hauptaufgabe bei der ich nicht weiter komme ist das ich auf den Vector den ich in S deklariert habe Indizierten Zugriff erreichen soll.</p>
</blockquote>
<p>Ich sehe aber keinen Vektor, den Du in S deklariert hast?!</p>
<p>Das Problem ist IMHO, dass der <code>operator[]</code> derzeit nicht vernünftig zu implementieren ist, weil T nicht unbeding einen <code>operator[]</code> hat:<br />
Bei <code>S&lt;vector&lt;char&gt;&gt;</code> schon, bei <code>S&lt;int&gt;</code> nicht.</p>
<p>Vielleicht soll Dein S viel eher so aussehen?!</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct S {
  std::vector&lt;T&gt; val;
  //....
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2443797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443797</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sun, 22 Feb 2015 13:33:22 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 13:38:30 GMT]]></title><description><![CDATA[<p>Hm, ich verstehe deine Aufgabenstellung nicht so ganz. Deine Verwendung des Klassentemplates ist eigenartig. Ein Typ, der einzelne Variablen, z.B. ints haelt, aber auch Vektoren.<br />
So wie du es momentan geschrieben hast, koennen einige Operationen nicht funktionieren.<br />
Dein operator&gt;&gt; hat z.B. zwei Probleme:<br />
1. Er ist super merkwuerdig geschrieben. Da du ihn als Memberfunktion ausgelegt hast, muss man statt</p>
<pre><code>cin &gt;&gt; var;
</code></pre>
<pre><code>var &gt;&gt; cin;
</code></pre>
<p>schreiben. Ich schaetze mal, das ist nicht das, was du willst.<br />
2. Fuer einen Typ, der nicht operator&gt;&gt; anbietet, kompiliert dein Code nicht. Das kann ok sein, vielleicht willst du ja nur diese Typen unterstuetzen. Hiermit kollidiert aber dein Vorhaben, std::vector als Typ zu verwenden. Hier solltest du dich entscheiden.</p>
<p>Mein Tipp an dich: Schreibe ein neues Klassentemplate, das intern einen std::vector&lt;T&gt; haelt. Schreibe dann getter und setter, die den Vektor manipulieren. Wenn du das hast, kannst du das zu operator[] umschreiben.</p>
<p>Edit: siehe Furble Wurbles Beitrag.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443798</guid><dc:creator><![CDATA[Hyde++ 0]]></dc:creator><pubDate>Sun, 22 Feb 2015 13:38:30 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 13:54:45 GMT]]></title><description><![CDATA[<p>O Sorry der Eingabeoperator selbst ist Falsch geschrieben denn muss ich überarbeiten.</p>
<p>Das Objekt S deklariere ich als Typ Vector im Zeile 92. und initialisiere es mit vi.<br />
Eventuell liegt ja auch da schon mein Fehler ?<br />
Vielleicht muss ich Ihn ja über den Eingabeoperator befüllen oder eine push_back Funktion schreiben.<br />
Das ist in den Aufgabenstellungen aber leider nicht ersichtlich.</p>
<p>Leider ist die Aufgabe der Deklaration T val vorgegeben .<br />
Na gut, trotz dem vielen Dank für Deine Unterstützung ich werde mal versuchen den Eingabeoperator hin zu bekommen und dann den vector damit befüllen, vielleicht ergibt sich dann die Sache. wie bereits erwähnt ist das befüllen und lesen von vector&lt;vector&lt;int&gt;&gt; für mich ja auch noch ein bömisches Dorf und deshalb dachte ich das ich den vector vi einfach in v kopieren kann.<br />
Ich bin von ausgegangen das ich v[i] schreiben kann und fertig .</p>
<p><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="🙂"
    /> Ist halt doch nicht alles so einfach <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/2443802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443802</guid><dc:creator><![CDATA[utass]]></dc:creator><pubDate>Sun, 22 Feb 2015 13:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 16:03:43 GMT]]></title><description><![CDATA[<p>Puh, das verwirrt mich nur noch mehr...</p>
<p>Dir geht es doch um operator[]? Jetzt schreibst du etwas von initialisieren und push_back. Das passt fuer mich nicht zusammen.</p>
<p>Kannst du eine GENAUE Aufgabenstellung schreiben? Das wuerde eventuell einiges erleichtern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443828</guid><dc:creator><![CDATA[Hyde++ 0]]></dc:creator><pubDate>Sun, 22 Feb 2015 16:03:43 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 16:07:54 GMT]]></title><description><![CDATA[<p>utass schrieb:</p>
<blockquote>
<p>Leider ist die Aufgabe der Deklaration T val vorgegeben.</p>
</blockquote>
<p>Zeig mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443830</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 22 Feb 2015 16:07:54 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 16:51:23 GMT]]></title><description><![CDATA[<p>OK ich mach mir mal die Arbeit.<br />
Aufgaben Kapitel 19 Vektor, Templates und Ausnahmen<br />
Buch Einführung in die Programmierung mit C++ Bjarne Stroustrup</p>
<p>1.) Definieren Sie das Template template &lt;class T&gt; struct S{T val;}.</p>
<p>2.) Ergänzen Sie einen Konstruktor , das Sie mit einem T-Objekt initialisieren können.</p>
<p>3.) Definieren Sie Variablen der Typen S&lt;int&gt;,S&lt;char&gt;, S&lt;double&gt; und<br />
S&lt;vector&lt;int&gt;&gt;, initialisieren Sie die Variablen mit Werten Ihrer Wahl.</p>
<p>4.) Lesen Sie die Werte ein und wieder aus.</p>
<p>5.) Fügen Sie ein Funktions-Template get() hinzu , das eine Referenz auf val zurückliefert.</p>
<p>6.) Definieren Sie get() außerhalb der Klasse.</p>
<p>7.) Machen Sie val private.</p>
<p>8.) Nehmen Sie sich noch einmal Aufgabe 4 vor und verwenden Sie diesmal dazu Ihr Funktions-Template get().</p>
<p>9.) Fügen Sie ein Funktions-Template set() hinzu , mit dem Sie val ändern können.</p>
<p>10.) Ersetzen Sie set() durch operator=(const T &amp;).</p>
<p>11.) Stellen Sie const und Nicht- const- Versionen von Operator[] bereit.</p>
<p>Ich hoffe das dies weiter hilft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443836</guid><dc:creator><![CDATA[utass]]></dc:creator><pubDate>Sun, 22 Feb 2015 16:51:23 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 17:04:16 GMT]]></title><description><![CDATA[<p>Oh, Leute, verwirrt den/die/das utass doch nicht unnötig.<br />
Der zu definierende <code>operator []</code> ist natürlich nur verwendbar wenn man ein <code>T</code> mit <code>operator []</code> verwendet. Wie im Beispiel <code>S&lt;vector&lt;int&gt;&gt;</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443838</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 22 Feb 2015 17:04:16 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 17:12:11 GMT]]></title><description><![CDATA[<p>Hallo Hustbaer,</p>
<p>wieso funktioniert dann T&amp; operator[](int i)<br />
{<br />
return val[i];<br />
}<br />
nicht ?<br />
Kannst Du mir da bitte auf die Sprünge helfen , das ich weiter komme ?<br />
Ich trete schon so lange auf dieser Stelle aber finde keine Lösung der Compiler ist immer am meckern.</p>
<p>BITTE <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/2443839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443839</guid><dc:creator><![CDATA[utass]]></dc:creator><pubDate>Sun, 22 Feb 2015 17:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 17:39:23 GMT]]></title><description><![CDATA[<p>Ich finde die Aufgabenstellung einfach sehr merkwuerdig, das passt finde ich nicht zu Bjarne.<br />
Naja, wie auch immer:</p>
<p>Wenn du Memberfunktionen auf die &quot;uebliche&quot; Weise deklarierst und definierst, werden sie non-const:</p>
<pre><code>struct S // wir vergessen mal kurz die templates
{
    void change(int some_parameter);
};
</code></pre>
<p>Diese Funktion kann auch nur von non-const Instanzen von S aufgerufen werden.<br />
Wenn du nach dem Kopf der Funktion ein const nachstellst, gehts auch mit konstanten Objekten. Das ist hier gesucht.</p>
<pre><code>struct S // wir vergessen mal kurz die templates
{
    void dont_change(int some_parameter) const;
                                      // ^^^^^^  Bam!
};
</code></pre>
<p>In konstanten Memberfunktionen darfst du das Object natuerlich auch nicht veraendern.</p>
<p>Zum operator[] (und das erlaube ich mir mal, da du ja auch schon in Kapitel 19 bist):<br />
Wenn das schon in einer Klasse geschehen soll, in der die Anwendung eines operator[]s mal sinnvoll und mal nicht sinnvoll ist, koenntest du auch eine Spezialisierung des Klassentemplates fuer std::vector schreiben, das operator[] anbietet.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;

template&lt;typename T&gt;
class S
{
    public:
        S(const T&amp; t) : t(t)
        {
        }

    private:
        T t;
};

template&lt;typename T&gt;
class S&lt;std::vector&lt;T&gt;&gt;
{
    public:
        S(const std::vector&lt;T&gt;&amp; v) : vec(v)
        {
        }

        T&amp; operator[](unsigned int i)
        {
            return vec[i];
        }

    private:
        std::vector&lt;T&gt; vec;
};

int main()
{
    S&lt;double&gt; sd(3.14);
    std::vector&lt;int&gt; temp({1, 2, 3});
    S&lt;std::vector&lt;int&gt;&gt; v(temp);
    std::cout &lt;&lt; v[0] &lt;&lt; '\n';
}
</code></pre>
<blockquote>
<p>wieso funktioniert dann T&amp; operator[](int i)<br />
{<br />
return val[i];<br />
}<br />
nicht ?</p>
</blockquote>
<p>&quot;Funktioniert nicht&quot; ist so eine Sache. Was erhaelst du denn als Fehlermeldung? Prinzipiell sieht der code ok aus, wobei das natuerlich nur fuer Typen kompiliert, die selbst operator[] anbieten.</p>
<p>Edit: Die Aufgabe ist doch sehr merkwuerdig. Was soll denn die Signatur von operator[] sein?</p>
<pre><code>template&lt;typename T&gt;
class S
{
    public:
        S(const T&amp; t) : m_t(t)
        {
        }

        T operator[](int i) // das geht natuerlich nicht, T ist ja vector&lt;irgendwas&gt;
        {
            return m_t[i];
        }

        typename T::value_type operator[](int i) // ok, aber naja...
        {
            return m_t[i];
        }

    private:
        T m_t;
};
</code></pre>
<p>Das ist doch nicht so knorke. Dann lieber wie Furble Wurble es schrieb. Oder gleich eine sinnvolle Aufgabe machen.</p>
<p>Wenn du operator-ueberladung ansehen moechtest, schreibe lieber eine eigene kleine vector-klasse. Das ist eine schoene uebung, in der man einiges beachten muss. Man lernt noch was ueber RAII, die Regel der Drei (bzw. Fuenf), kann viele Operatoren ueberladen, hat templates usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443841</guid><dc:creator><![CDATA[Hyde++ 0]]></dc:creator><pubDate>Sun, 22 Feb 2015 17:39:23 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 17:34:40 GMT]]></title><description><![CDATA[<p>Moin.<br />
In den Errata ist die Aufgabe geändert. Wohl ein Typo.<br />
Hoffentlich haste nicht die Lust verloren... <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>
<p>Bjarne S. schrieb:</p>
<blockquote>
<p>(+1/16/2010) pg 681: Revised chapter 19 drill:</p>
<p>1-9 unchanged<br />
10. Replace set() with an S&lt;T&gt;::operator=(const T&amp;). Hint: Much simpler than §19.2.5.<br />
11. Provide const and non-const versions of get();<br />
12-13 unchanged<br />
14: Bonus: Define input and output operators (&gt;&gt; and &lt;&lt;) for vector&lt;T&gt;'s.<br />
For both input and output use a { val, val, val } format.<br />
That will allow read_val() to also handle the S&lt; vector&lt;int&gt; &gt; variable.</p>
</blockquote>
<p><a href="http://www.stroustrup.com/Programming/errata2p.html" rel="nofollow">http://www.stroustrup.com/Programming/errata2p.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443845</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sun, 22 Feb 2015 17:34:40 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 17:45:01 GMT]]></title><description><![CDATA[<p>OK, an den Rückgabetypen hab' ich nicht gedacht.</p>
<p>In C++11 sollte es kein Problem sein, weil man <code>-&gt; auto&amp;</code> verwenden kann.</p>
<pre><code class="language-cpp">auto operator[](size_t i) -&gt; auto&amp;
     { 
     	return val[i];
     }
</code></pre>
<p>In C++03 müsste man die Funktion auf z.B. Container die <code>T::value_type</code> definieren einschränken:</p>
<pre><code class="language-cpp">typename T::value_type operator[](size_t i)
     { 
     	return val[i];
     }
</code></pre>
<p>Wobei der aktuell von ideone für C++14 verwendete Compiler hier der Meinung ist die Funktion sofort instanzieren zu müssen, was dann natürlich für Typen wie <code>int</code> bei <code>T::value_type</code> kracht.</p>
<pre><code>prog.cpp: In instantiation of 'struct S&lt;int&gt;':
prog.cpp:25:15:   required from here
prog.cpp:15:29: error: 'int' is not a class, struct, or union type
      typename T::value_type operator[](size_t i)
</code></pre>
<p>Sollte das nicht explizit über SFINAE erlaubt sein?<br />
So lange <code>operator []</code> nirgends verwendet wird, besteht ja keine Notwendigkeit dass <code>T::value_type</code> was sinnvolles ergibt oder auch nur existiert.</p>
<p>Oder hab' ich da was falsch verstanden/falsch in Erinnerung?</p>
<p>EDIT: Da mein Beitrag hier ne neue Seite angefangen hat...<br />
Furble Wurble hat die Erklärung gefunden - die Aufgabe mit <code>operator []</code> war schlicht ein Fehler: <a href="https://www.c-plusplus.net/forum/p2443845#2443845">https://www.c-plusplus.net/forum/p2443845#2443845</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443847</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 22 Feb 2015 17:45:01 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 18:01:20 GMT]]></title><description><![CDATA[<p>Hallo Leutz,<br />
Danke Furble Wurble dann kann ich die Aufgabe ja getrost auslassen.<br />
Ich wusste gar nicht das es so etwas wie eine Korrektur für das Buch gibt.<br />
Leider kann ich auch kein Englisch, so das ich mich auf der Seite belesen könnte aber ich werde mir die Seite für spätere Eventualitäten abspeichern.</p>
<p>Danke auch allen anderen Helferlein.</p>
<p>Ich werd dann mal weiter machen.<br />
Lust verlieren ist nicht eher mach ich ne Pause und lass sacken.<br />
Ich hab hier 4 Bücher zu liegen aber manchmal fehlt einen dann doch die Möglichkeit mit einen darüber zu reden wenn man nicht weiter kommt.</p>
<p>Bis auf ein nächstes mal nun hol ich erst mal nen Eisbecher <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="😃"
    /> <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>Guido</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443854</guid><dc:creator><![CDATA[utass]]></dc:creator><pubDate>Sun, 22 Feb 2015 18:01:20 GMT</pubDate></item><item><title><![CDATA[Reply to operator [] Überladung on Sun, 22 Feb 2015 18:04:42 GMT]]></title><description><![CDATA[<p>utass schrieb:</p>
<blockquote>
<p>aber manchmal fehlt einen dann doch die Möglichkeit mit einen darüber zu reden wenn man nicht weiter kommt.</p>
</blockquote>
<p>Rettet dem Dativ! <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/2443858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443858</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 22 Feb 2015 18:04:42 GMT</pubDate></item></channel></rss>