<?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[Überladen der Operatoren]]></title><description><![CDATA[<p>Hallo ich habe grade ein Verständnisproblem bei dem mit dem Beispiel der Klasse Rational als dem Buch der c++ Programmierer. Und zwar wo muss ich dies deklarieren:</p>
<pre><code>const Rational operator+(const Rational &amp;);
</code></pre>
<p>Denn da steht noch etwas von globalen Operatoren...</p>
<p>Aber wenn ich die global setze meckert er mir das übliche does not name a type...</p>
<p>Ich hab jedenfalls so versucht...</p>
<pre><code>..

class Rational{

	private:
	long zaehler, nenner;

	public:

	Rational();
	Rational(long int z, long int n);
	Rational(const Rational&amp; Bruch);
	Rational(double zahl);

	void pruefenenner();
	void kuerzen();
	void kehrwert();
	void negativ();
	void ausgabe();	

	long int getZaehler() const;
	long int getNenner() const;

	const Rational operator+(const Rational &amp;);

};
...

const Rational operator+(const Rational &amp;a, const Rational &amp;b){
	return Rational(a.getZaehler()*b.getNenner()+b.getZaehler()*a.getNenner(),a.getNenner()*b.getNenner());
}

int main(){

	long int z,n,z2,n2;
	cout&lt;&lt;&quot;erste Zahl-Zaehler :&quot;&lt;&lt;'\n';
	cin&gt;&gt;z;
	cout&lt;&lt;&quot;erste Zahl-Nenner :&quot;&lt;&lt;'\n';
	cin&gt;&gt;n;

	cout&lt;&lt;&quot;zweite Zahl-Zaehler :&quot;&lt;&lt;'\n';
	cin&gt;&gt;z2;
	cout&lt;&lt;&quot;zweite Zahl-Nenner :&quot;&lt;&lt;'\n';
	cin&gt;&gt;n2;

	Rational a(z,n);
	Rational b(z2,n2);

	Rational c;
	c=a+b;

	c.ausgabe();
	cout&lt;&lt;'\n';

}
</code></pre>
<p>Bekomme aber den Fehler: Undefined reference to `Rational::operator+(Rational const&amp;)'</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313899/überladen-der-operatoren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 22:36:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313899.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Feb 2013 13:12:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überladen der Operatoren on Wed, 13 Feb 2013 13:12:09 GMT]]></title><description><![CDATA[<p>Hallo ich habe grade ein Verständnisproblem bei dem mit dem Beispiel der Klasse Rational als dem Buch der c++ Programmierer. Und zwar wo muss ich dies deklarieren:</p>
<pre><code>const Rational operator+(const Rational &amp;);
</code></pre>
<p>Denn da steht noch etwas von globalen Operatoren...</p>
<p>Aber wenn ich die global setze meckert er mir das übliche does not name a type...</p>
<p>Ich hab jedenfalls so versucht...</p>
<pre><code>..

class Rational{

	private:
	long zaehler, nenner;

	public:

	Rational();
	Rational(long int z, long int n);
	Rational(const Rational&amp; Bruch);
	Rational(double zahl);

	void pruefenenner();
	void kuerzen();
	void kehrwert();
	void negativ();
	void ausgabe();	

	long int getZaehler() const;
	long int getNenner() const;

	const Rational operator+(const Rational &amp;);

};
...

const Rational operator+(const Rational &amp;a, const Rational &amp;b){
	return Rational(a.getZaehler()*b.getNenner()+b.getZaehler()*a.getNenner(),a.getNenner()*b.getNenner());
}

int main(){

	long int z,n,z2,n2;
	cout&lt;&lt;&quot;erste Zahl-Zaehler :&quot;&lt;&lt;'\n';
	cin&gt;&gt;z;
	cout&lt;&lt;&quot;erste Zahl-Nenner :&quot;&lt;&lt;'\n';
	cin&gt;&gt;n;

	cout&lt;&lt;&quot;zweite Zahl-Zaehler :&quot;&lt;&lt;'\n';
	cin&gt;&gt;z2;
	cout&lt;&lt;&quot;zweite Zahl-Nenner :&quot;&lt;&lt;'\n';
	cin&gt;&gt;n2;

	Rational a(z,n);
	Rational b(z2,n2);

	Rational c;
	c=a+b;

	c.ausgabe();
	cout&lt;&lt;'\n';

}
</code></pre>
<p>Bekomme aber den Fehler: Undefined reference to `Rational::operator+(Rational const&amp;)'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298598</guid><dc:creator><![CDATA[Namal]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:12:09 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen der Operatoren on Wed, 13 Feb 2013 13:16:26 GMT]]></title><description><![CDATA[<p>Namal schrieb:</p>
<blockquote>
<p>Bekomme aber den Fehler: Undefined reference to `Rational::operator+(Rational const&amp;)'</p>
</blockquote>
<p>Du deklarierst die Memberfunktion &quot;const Rational operator+(const Rational &amp;);&quot;, definierst aber die freie Funktion &quot;const Rational operator+(const Rational &amp;a, const Rational &amp;b&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298604</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:16:26 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen der Operatoren on Wed, 13 Feb 2013 13:21:47 GMT]]></title><description><![CDATA[<p>Deklariert:</p>
<pre><code>const Rational::Rational operator+(const Rational &amp;);
</code></pre>
<p>Definiert:</p>
<pre><code>const Rational operator+(const Rational &amp;a, const Rational &amp;b){
    return Rational(a.getZaehler()*b.getNenner()+b.getZaehler()*a.getNenner(),a.getNenner()*b.getNenner());
}
</code></pre>
<p>Übrigens solltest du den Operator (wenn du ihn als Member definierst) konstant machen weil sonst folgender Code nicht funktionieren würde:</p>
<pre><code>const Rational lhs(/*...*/), rhs(/*...*/);
Rational Result = lhs + rhs;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2298609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298609</guid><dc:creator><![CDATA[MarcoYolo]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:21:47 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen der Operatoren on Wed, 13 Feb 2013 13:27:52 GMT]]></title><description><![CDATA[<p>also hab ich dann die Zeile 24 entfernt und jetzt funktioniert es. Dann muss ich es ganrnicht deklarieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298611</guid><dc:creator><![CDATA[Namal]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:27:52 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen der Operatoren on Wed, 13 Feb 2013 13:35:33 GMT]]></title><description><![CDATA[<p>Du deklarierst und definierst den gewünschten Operator in Zeile 29...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298617</guid><dc:creator><![CDATA[MarcoYolo]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:35:33 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen der Operatoren on Wed, 13 Feb 2013 13:44:19 GMT]]></title><description><![CDATA[<p>MarcoYolo schrieb:</p>
<blockquote>
<p>Übrigens solltest du den Operator (wenn du ihn als Member definierst) konstant machen weil sonst folgender Code nicht funktionieren würde</p>
</blockquote>
<p>Wenn ich das so machen will, wie muss dann die Definition aussehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298625</guid><dc:creator><![CDATA[Namal]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:44:19 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen der Operatoren on Wed, 13 Feb 2013 13:46:16 GMT]]></title><description><![CDATA[<p>Namal schrieb:</p>
<blockquote>
<p>MarcoYolo schrieb:</p>
<blockquote>
<p>Übrigens solltest du den Operator (wenn du ihn als Member definierst) konstant machen weil sonst folgender Code nicht funktionieren würde</p>
</blockquote>
<p>Wenn ich das so machen will, wie muss dann die Definition aussehen?</p>
</blockquote>
<pre><code class="language-cpp">const Rational operator+(const Rational &amp;) const;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2298627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298627</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:46:16 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen der Operatoren on Wed, 13 Feb 2013 13:49:10 GMT]]></title><description><![CDATA[<p>Du kannst den Operator als Member machen:</p>
<pre><code>struct foo
{
    foo operator+ (const foo&amp; rhs) const;
};
</code></pre>
<p>Das <code>const</code> hier nach der Deklaration bedeutet, dass du die Methode auch von konstanten Instanzen aus aufrufen kannst.</p>
<p>Oder als freie Funktion:</p>
<pre><code>struct foo
{
};
foo operator+ (const foo&amp; lhs, const foo&amp; rhs);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2298629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298629</guid><dc:creator><![CDATA[MarcoYolo]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:49:10 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen der Operatoren on Wed, 13 Feb 2013 13:54:23 GMT]]></title><description><![CDATA[<p>Ok, das hab ich jetzt verstanden. Doch wie sieht die Definition der Member dann aus? Bei kehrwert() z.B. ist es ja</p>
<pre><code>void Rational::kehrwert(){
	long int temp = zaehler;
	zaehler = nenner;
	nenner = temp;
	kuerzen();
	pruefenenner();
}
</code></pre>
<p>Wie muss die erste Zeile aussehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298634</guid><dc:creator><![CDATA[Namal]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:54:23 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen der Operatoren on Wed, 13 Feb 2013 13:58:13 GMT]]></title><description><![CDATA[<p>Du meinst wohl die Definition der Methoden. Diese stimmt so wie du sie eben geschrieben hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298635</guid><dc:creator><![CDATA[MarcoYolo]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:58:13 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen der Operatoren on Wed, 13 Feb 2013 13:59:07 GMT]]></title><description><![CDATA[<p>MarcoYolo schrieb:</p>
<blockquote>
<p>Du kannst den Operator als Member machen:</p>
</blockquote>
<p><em>Kann</em> er, sollte er aber normalerweise nicht. Wenn z.B. int implizit in Rational umgewandelt werden kann, funktioniert sowas: <code>Rational(1,2) + 5</code> , sowas aber nicht: <code>5 + Rational(1,2)</code> , weil bei Member-operatoren der erste Operand nicht umgewandelt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298636</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:59:07 GMT</pubDate></item></channel></rss>