<?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[Probleme beim Überladen von Operatoren.]]></title><description><![CDATA[<p>Hallo.<br />
Hier mein COde.</p>
<pre><code class="language-cpp">class cDatum
{
	public:

		cDatum(int Tag, int Monat, int Jahr);
		cDatum(const cDatum &amp;datum);

		int iTag, iMonat, iJahr, iTagInDerWoche;
		string sWochtentag;		

		cDatum* operator+(int &amp;tage);

	private:

		bool CheckDate();
		bool CheckSchaltjahr();
		string GetWochentag();
		int GetTageImMonat(int monat);
		int GetTagInDerWoche();
};
</code></pre>
<p>und hier ist die funktion :</p>
<pre><code class="language-cpp">cDatum* cDatum::operator+ (int &amp;tage)
{
	cout&lt;&lt;&quot;TAGE :\t&quot;&lt;&lt;tage&lt;&lt;&quot;\n&quot;;
    // Operator zum inkrementieren des Datums.

	cDatum *temp = new cDatum(*this);
	temp-&gt;iTag++;

	if (!temp-&gt;CheckDate())
	{
		// Es ist ein ungültiges Datum erzeugt worden.
		if( temp-&gt;iMonat &lt; 12)
		{
			temp-&gt;iMonat++;
			temp-&gt;iTag = 1;
		}
		else
		{
			temp-&gt;iJahr++;
			temp-&gt;iMonat = 1;
			temp-&gt;iTag = 1;
		}
	}

	return temp;
}
</code></pre>
<p>Und nun der Aufruf :</p>
<pre><code class="language-cpp">pDatum = new cDatum(1,1,2007);
pDatum= pDatum + 3;
	cout&lt;&lt;pDatum-&gt;iTag&lt;&lt;&quot; &quot;&lt;&lt;pDatum-&gt;iMonat&lt;&lt;&quot; &quot;&lt;&lt;pDatum-&gt;iJahr&lt;&lt;&quot;\n&quot;;
</code></pre>
<p>Was soll passieren. Nun ja ich will das datumsobjekt um 3 tage erweitern. aber es kommen nuur riesige negative zahlen heruas was für eine nicjt initialisiereung spricht.<br />
Was mache ich bei der verwendung bzw implementierung des &quot;+&quot; operators falsch.</p>
<p>Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/240565/probleme-beim-überladen-von-operatoren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 23:08:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240565.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 08 May 2009 08:46:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme beim Überladen von Operatoren. on Fri, 08 May 2009 08:47:51 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Hier mein COde.</p>
<pre><code class="language-cpp">class cDatum
{
	public:

		cDatum(int Tag, int Monat, int Jahr);
		cDatum(const cDatum &amp;datum);

		int iTag, iMonat, iJahr, iTagInDerWoche;
		string sWochtentag;		

		cDatum* operator+(int &amp;tage);

	private:

		bool CheckDate();
		bool CheckSchaltjahr();
		string GetWochentag();
		int GetTageImMonat(int monat);
		int GetTagInDerWoche();
};
</code></pre>
<p>und hier ist die funktion :</p>
<pre><code class="language-cpp">cDatum* cDatum::operator+ (int &amp;tage)
{
	cout&lt;&lt;&quot;TAGE :\t&quot;&lt;&lt;tage&lt;&lt;&quot;\n&quot;;
    // Operator zum inkrementieren des Datums.

	cDatum *temp = new cDatum(*this);
	temp-&gt;iTag++;

	if (!temp-&gt;CheckDate())
	{
		// Es ist ein ungültiges Datum erzeugt worden.
		if( temp-&gt;iMonat &lt; 12)
		{
			temp-&gt;iMonat++;
			temp-&gt;iTag = 1;
		}
		else
		{
			temp-&gt;iJahr++;
			temp-&gt;iMonat = 1;
			temp-&gt;iTag = 1;
		}
	}

	return temp;
}
</code></pre>
<p>Und nun der Aufruf :</p>
<pre><code class="language-cpp">pDatum = new cDatum(1,1,2007);
pDatum= pDatum + 3;
	cout&lt;&lt;pDatum-&gt;iTag&lt;&lt;&quot; &quot;&lt;&lt;pDatum-&gt;iMonat&lt;&lt;&quot; &quot;&lt;&lt;pDatum-&gt;iJahr&lt;&lt;&quot;\n&quot;;
</code></pre>
<p>Was soll passieren. Nun ja ich will das datumsobjekt um 3 tage erweitern. aber es kommen nuur riesige negative zahlen heruas was für eine nicjt initialisiereung spricht.<br />
Was mache ich bei der verwendung bzw implementierung des &quot;+&quot; operators falsch.</p>
<p>Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707570</guid><dc:creator><![CDATA[dercooleauswandere]]></dc:creator><pubDate>Fri, 08 May 2009 08:47:51 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Überladen von Operatoren. on Fri, 08 May 2009 09:19:35 GMT]]></title><description><![CDATA[<p><code>pDatum</code> ist ein Zeiger. Du erhöhst diesen Zeiger um <code>3 * sizeof(cDatum)</code> . Danach greifst du über diesen ins völlige Nirvana zeigende Zeiger zu und aus einem Wunder heraus funktioniert es sogar und gibt dir die Werte an dieser Speicherstelle aus. Grundsätzlich ist es undefiniertes Verhalten, welches du auslöst.</p>
<p>Ich empfehle, dass du mal diesen Artikel hier liest:<br />
<a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20(Teil%201)" rel="nofollow">Operatoren Überladung - C++ Magazin</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707597</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 08 May 2009 09:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Überladen von Operatoren. on Fri, 08 May 2009 09:24:31 GMT]]></title><description><![CDATA[<p>zuerst einmal sollte ein operator+ keinen Zeiger sondern ein neues cdatum zurückgeben.<br />
Dann machst du beim Aufruf den Fehler, nämlich hier:</p>
<pre><code class="language-cpp">pDatum= pDatum + 3;
</code></pre>
<p>Das ist keine Addtion von Daten sondern eine Zeigeraddition. Du zeigst danach auf irgendeinen Bereich im Speicher und kannst froh sein (oder auch nicht), dass das Programm dir nicht gleich mit einem segfault oder ähnlichem um die Ohren fliegt.</p>
<p>Dem Anschein nach kommst du entweder von C oder evtl. auch java, dass du alles über Zeiger machen möchtest - das ist in C++ so nicht üblich.</p>
<p>/edit: mal wieder zu spät...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707600</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 08 May 2009 09:24:31 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Überladen von Operatoren. on Fri, 08 May 2009 09:27:05 GMT]]></title><description><![CDATA[<p>Ja klar. Mensch logisch manchmal ist man aber auch blind.</p>
<p>danke eure aNtworten haben mir geholfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707605</guid><dc:creator><![CDATA[dercooleauswandere]]></dc:creator><pubDate>Fri, 08 May 2009 09:27:05 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Überladen von Operatoren. on Fri, 08 May 2009 09:32:58 GMT]]></title><description><![CDATA[<p>dercooleauswandere schrieb:</p>
<blockquote>
<p>Hier mein COde.</p>
</blockquote>
<p>Zu der Ungarischen Notation werde ich mich mal zurückhalten...</p>
<p>Was du aber grundsätzlich berücksichtigen solltest ist, das du die C++ Vorgaben berücksichtigst (z.B. welchen Aufbau üblicherweise Operatoren haben, und das Zeiger keine Objekte sind).</p>
<pre><code class="language-cpp">cDatum * pDatum = new cDatum(1,1,2007);
pDatum = pDatum + 3;
</code></pre>
<p>Hier erhöhst du den Zeiger, sprich die Speicheradresse im selbigen, um 3. Sicherlich nicht erwünscht. Auf Zeiger lassen sich keine Operatoren von Objekten anwenden.</p>
<p>Zudem sollte man immer alle Operatoren zu einem bereich überladen. Wenn du den operator+ definierst, solltest du auch den operator operator+= implementieren.</p>
<pre><code class="language-cpp">cDatum datum(1,1,2007);
datum = datum + 3; // operator+
datum += 3;        // operator+=
</code></pre>
<p>Hinzu kommt das es üblich ist den operator+ ein Objekt, den operator+= eine Referenz auf sich selbst zurückgeben zu lassen. In der Regel ist es auch besser den operator+ als Funktion, nicht als Methode zu implementieren, und diesen über operator+= zu implementieren.</p>
<pre><code class="language-cpp">class cDatum
{
  public:
    cDatum &amp; operator+=(int tage)
    {
        //...
        return * this;
    }
};

cDatum operator+(cDatum const &amp; datum, int tage)
{
    cDatum retval = datum;
    retval += tage;
    return retval;
}
cDatum operator+(int tage, cDatum const &amp; datum)
{
    cDatum retval = datum;
    retval += tage;
    return retval;
}
</code></pre>
<p>Zu guter letzt lässt dein Code noch ein Problem zu:</p>
<pre><code class="language-cpp">cDatum datum(1,1,2007);
datum.iMonat = 40;
</code></pre>
<p>Datenkapselung ist nicht ohne Grund üblich (Im Zweifel durch Getter/Setter-Methoden).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707612</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 08 May 2009 09:32:58 GMT</pubDate></item></channel></rss>