<?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[Konstruktor mit Überprüfung]]></title><description><![CDATA[<p>Hallo zusammen mal wieder eine Frage zum Thema Klassen.</p>
<p>Und zwar habe ich einen Standard Konstruktor der Klasse Datum:</p>
<p>Deklaration:</p>
<pre><code>// Standard Konstruktor
	Datum(const int x=1, const int y=1, const int z=1900);
</code></pre>
<p>Definition</p>
<pre><code>Datum::Datum(const int x, const int y, const int z) : tag_(x), monat_(y), jahr_(z)
{
    //...
	return;
}
</code></pre>
<p>Set-Methoden:</p>
<pre><code>// Set-Methoden Definitionen //
void Datum::setTag(const int x) {tag_=x; return;}
void Datum::setMonat(const int y) {monat_=y; return;}
void Datum::setJahr(const int z) {jahr_=z; return;}
</code></pre>
<p>Ich möchte nun aber ein Datum mit folgenden Werten anlegen:</p>
<pre><code>Datum d3(29,2,2007);
</code></pre>
<p>Dafür möchte ich aber nicht den Standardkonstruktor aufrufen, sondern einen Konstruktor, der überprüft ob das Datum überhaupt existiert.</p>
<p>Ich habe ein Funktion geschreiben, die ein Datum auf seine Gültigkeit prüft:</p>
<pre><code>bool Datum::isValid()
{
  if (! (1582&lt;= jahr_ )  )//ab aktuelle jahresberechnung
     return false;
  if (! (1&lt;= monat_ &amp;&amp; monat_&lt;=12) )// 12 monate checken
     return false;
  if (! (1&lt;= tag_ &amp;&amp; tag_&lt;=31) ) // tage unter 31 liegen
     return false;
  if ( (tag_==31) &amp;&amp; (monat_==2 || monat_==4 || monat_==6 || monat_==9 || monat_==11) ) // monate die keine 31 tage haben
     return false;
  if ( (tag_==30) &amp;&amp; (monat_==2) ) // februar hat keine 31 tage
     return false;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%4!=0) ) //februar auf schaltjahr prüfen - kein schaltjahr
     return false;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%400==0) ) //februar auf schaltjahr prüfen - ist schaltjahr
     return true;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%100==0) ) //februar auf schaltjahr prüfen - kein schaltjahr
     return false;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%4==0)  ) //februar auf schlatjahr prüfen - ist schaltjahr
     return true;

  return true;
}
</code></pre>
<p>Nun meine Fragen:<br />
1. Wie lege ich den Konstruktor an damit der die übergebenen Daten prüft<br />
2. Wenn die Daten nicht richitg sind, soll eine Fehlermeldung ausgegeben werden (ohne Exceptions) und dann soll der Standardkonstruktor aufgerufen werden und das Standard Datum angelegt werden.</p>
<p>Ich nehme auch Hinweise entgegen wo so ein Verfahren beschrieben ist. Ich möchte nicht unbedingt die komplette Lösung dafür haben sondern gucken das ich dabei soviel wie möglich lerne.<br />
Vielen Dank.</p>
<p>Falls noch Fragen zu Programmteilen bestehen einfach Bescheid sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318375/konstruktor-mit-überprüfung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 09:25:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318375.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 10 Jul 2013 14:31:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 14:31:17 GMT]]></title><description><![CDATA[<p>Hallo zusammen mal wieder eine Frage zum Thema Klassen.</p>
<p>Und zwar habe ich einen Standard Konstruktor der Klasse Datum:</p>
<p>Deklaration:</p>
<pre><code>// Standard Konstruktor
	Datum(const int x=1, const int y=1, const int z=1900);
</code></pre>
<p>Definition</p>
<pre><code>Datum::Datum(const int x, const int y, const int z) : tag_(x), monat_(y), jahr_(z)
{
    //...
	return;
}
</code></pre>
<p>Set-Methoden:</p>
<pre><code>// Set-Methoden Definitionen //
void Datum::setTag(const int x) {tag_=x; return;}
void Datum::setMonat(const int y) {monat_=y; return;}
void Datum::setJahr(const int z) {jahr_=z; return;}
</code></pre>
<p>Ich möchte nun aber ein Datum mit folgenden Werten anlegen:</p>
<pre><code>Datum d3(29,2,2007);
</code></pre>
<p>Dafür möchte ich aber nicht den Standardkonstruktor aufrufen, sondern einen Konstruktor, der überprüft ob das Datum überhaupt existiert.</p>
<p>Ich habe ein Funktion geschreiben, die ein Datum auf seine Gültigkeit prüft:</p>
<pre><code>bool Datum::isValid()
{
  if (! (1582&lt;= jahr_ )  )//ab aktuelle jahresberechnung
     return false;
  if (! (1&lt;= monat_ &amp;&amp; monat_&lt;=12) )// 12 monate checken
     return false;
  if (! (1&lt;= tag_ &amp;&amp; tag_&lt;=31) ) // tage unter 31 liegen
     return false;
  if ( (tag_==31) &amp;&amp; (monat_==2 || monat_==4 || monat_==6 || monat_==9 || monat_==11) ) // monate die keine 31 tage haben
     return false;
  if ( (tag_==30) &amp;&amp; (monat_==2) ) // februar hat keine 31 tage
     return false;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%4!=0) ) //februar auf schaltjahr prüfen - kein schaltjahr
     return false;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%400==0) ) //februar auf schaltjahr prüfen - ist schaltjahr
     return true;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%100==0) ) //februar auf schaltjahr prüfen - kein schaltjahr
     return false;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%4==0)  ) //februar auf schlatjahr prüfen - ist schaltjahr
     return true;

  return true;
}
</code></pre>
<p>Nun meine Fragen:<br />
1. Wie lege ich den Konstruktor an damit der die übergebenen Daten prüft<br />
2. Wenn die Daten nicht richitg sind, soll eine Fehlermeldung ausgegeben werden (ohne Exceptions) und dann soll der Standardkonstruktor aufgerufen werden und das Standard Datum angelegt werden.</p>
<p>Ich nehme auch Hinweise entgegen wo so ein Verfahren beschrieben ist. Ich möchte nicht unbedingt die komplette Lösung dafür haben sondern gucken das ich dabei soviel wie möglich lerne.<br />
Vielen Dank.</p>
<p>Falls noch Fragen zu Programmteilen bestehen einfach Bescheid sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337952</guid><dc:creator><![CDATA[Tyle]]></dc:creator><pubDate>Wed, 10 Jul 2013 14:31:17 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 14:36:30 GMT]]></title><description><![CDATA[<p>Mir fallen da spontan zwei Möglichkeiten ein.</p>
<p>1. Du erstellst eine statische Factory-Methode</p>
<pre><code class="language-cpp">class Datum
{
  static Datum CreateDatum(int d, int m, int y)
  {
    if (IsValid(d,m,y)
      return Datum(d,m,y);

    PrintErrorMsg(d,m,y);
    return Datum(); // default
  }
};
</code></pre>
<p>2. Du integrierst die Prüfung in den Konstruktor:</p>
<pre><code class="language-cpp">class Datum
{
  Datum(int d=1, int m=1, int y=1900)
  {
    if (!IsValid(d,m,y)
    {
      PrintErrorMsg(d,m,y);
      m_d = 1;
      m_m = 1;
      m_y = 1900;
    }
  }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2337955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337955</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Wed, 10 Jul 2013 14:36:30 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 14:56:25 GMT]]></title><description><![CDATA[<blockquote>
<p>1. Wie lege ich den Konstruktor an damit der die übergebenen Daten prüft</p>
</blockquote>
<p>Gegenfrage: Was soll passieren, wenn das Datum ungueltig ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337958</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 10 Jul 2013 14:56:25 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 14:58:20 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>1. Wie lege ich den Konstruktor an damit der die übergebenen Daten prüft</p>
</blockquote>
<p>Gegenfrage: Was soll passieren, wenn das Datum ungueltig ist?</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
<p>Tyle schrieb:</p>
<blockquote>
<p>Wenn die Daten nicht richitg sind, soll eine Fehlermeldung ausgegeben werden (ohne Exceptions) und dann soll der Standardkonstruktor aufgerufen werden und das Standard Datum angelegt werden.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2337959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337959</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Wed, 10 Jul 2013 14:58:20 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 15:26:26 GMT]]></title><description><![CDATA[<p>Also das hat nicht funktioniert:</p>
<p>Konstruktor:</p>
<pre><code>Datum::Datum(unsigned int x, unsigned int y, unsigned int z)
{
	{
    if (!isValid(x,y,z))
    {
      cout &lt;&lt; &quot;Datum ist ungueltig!&quot;;
	  tag_ = 1;
	  monat_ = 1;
	  jahr_ = 1900;
    }
  }
}
</code></pre>
<p>Funktion:</p>
<pre><code>bool Datum::isValid(unsigned int tag_, unsigned int monat_, unsigned int jahr_)
{
  if (! (1582&lt;= jahr_ )  )//ab aktuelle jahresberechnung
     return false;
  if (! (1&lt;= monat_ &amp;&amp; monat_&lt;=12) )// 12 monate checken
     return false;
  if (! (1&lt;= tag_ &amp;&amp; tag_&lt;=31) ) // tage unter 31 liegen
     return false;
  if ( (tag_==31) &amp;&amp; (monat_==2 || monat_==4 || monat_==6 || monat_==9 || monat_==11) ) // monate die keine 31 tage haben
     return false;
  if ( (tag_==30) &amp;&amp; (monat_==2) ) // februar hat keine 31 tage
     return false;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%4!=0) ) //februar auf schaltjahr prüfen - kein schaltjahr
     return false;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%400==0) ) //februar auf schaltjahr prüfen - ist schaltjahr
     return true;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%100==0) ) //februar auf schaltjahr prüfen - kein schaltjahr
     return false;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%4==0)  ) //februar auf schlatjahr prüfen - ist schaltjahr
     return true;

  return true;
}
</code></pre>
<p>Das Datum wird angelegt, obwohl es nicht angelegt werden dürfte.<br />
Datum:</p>
<pre><code>Datum d3(29,2,2007);
</code></pre>
<p>Wo habe ich den Fehler gemacht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337967</guid><dc:creator><![CDATA[Tyle]]></dc:creator><pubDate>Wed, 10 Jul 2013 15:26:26 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 15:35:57 GMT]]></title><description><![CDATA[<p>Tyle schrieb:</p>
<blockquote>
<p>Wo habe ich den Fehler gemacht?</p>
</blockquote>
<p>geh mit dem Debugger durch, dann siehst du es. Deine SOnderbehandlung für den Februar ist inkonsistent zu den anderen Prüfungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337971</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Wed, 10 Jul 2013 15:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 15:55:37 GMT]]></title><description><![CDATA[<p>In wiefern inkonsestent? Die Funktion sollte laufen, habe die mal getestet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337981</guid><dc:creator><![CDATA[Tyle]]></dc:creator><pubDate>Wed, 10 Jul 2013 15:55:37 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 16:06:13 GMT]]></title><description><![CDATA[<p>Zeile 15 und 17 machen keinen Sinn irgendwie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337983</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 10 Jul 2013 16:06:13 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 16:45:49 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Zeile 15 und 17 machen keinen Sinn irgendwie.</p>
</blockquote>
<p>Inwiefern?</p>
<p><s>Edit: Ich würde die Reihenfolge umkehren, aber sonst...?</s> (beziehe mich jetzt nur auf 15 u. 17)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337984</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 10 Jul 2013 16:45:49 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 16:21:47 GMT]]></title><description><![CDATA[<p>Caligulaminus schrieb:</p>
<blockquote>
<p>~Edit: Ich würde die Reihenfolge umkehren, aber sonst...? (beziehe mich jetzt nur auf 15 u. 17)~</p>
</blockquote>
<p>Und ohne Umkehrung der Reihenfolge ist das ok? Insbesondere bei</p>
<p>Tyle schrieb:</p>
<blockquote>
<p>Das Datum wird angelegt, obwohl es nicht angelegt werden dürfte.<br />
Datum:</p>
<pre><code>Datum d3(29,2,2007);
</code></pre>
<p>Wo habe ich den Fehler gemacht?</p>
</blockquote>
<p>?</p>
<p>Bist du dir überhaupt sicher, dass eine Umkehrung der Reihenfolge ausreicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337987</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 10 Jul 2013 16:21:47 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 16:31:45 GMT]]></title><description><![CDATA[<p>Wenn du die Reihenfolge umkehren würdest dann würde die Ausnahme das Jahre/400 nicht Anwendung finden.</p>
<p>Daher muss doch erst die Ausnahme abgefragt werden.</p>
<blockquote>
<p>Alle durch 4 teilbaren Jahreszahlen sind Schaltjahre, aber nicht die durch 100 teilbaren, es sei denn sie sind sogar duch 400 teilbar.</p>
</blockquote>
<p>Hier das Testprogramm:</p>
<pre><code>#include &lt;string&gt;
#include &lt;iostream&gt;

using namespace std;

bool checkdate(int m, int d, int y);

int main(int argc, char* argv[])
{
  cout &lt;&lt; checkdate( 1, 1, 2005) &lt;&lt; endl; // 1=true
  cout &lt;&lt; checkdate( 0, 1, 2005) &lt;&lt; endl; // 0=false
  cout &lt;&lt; checkdate(13, 1, 2005) &lt;&lt; endl; // 0
  cout &lt;&lt; checkdate( 2,29, 1992) &lt;&lt; endl; // 1
  cout &lt;&lt; checkdate( 2,29, 1996) &lt;&lt; endl; // 1
  cout &lt;&lt; checkdate( 2,29, 2000) &lt;&lt; endl; // 1
  cout &lt;&lt; checkdate( 2,29, 2001) &lt;&lt; endl; // 0
  cout &lt;&lt; checkdate( 2,29, 2002) &lt;&lt; endl; // 0
  cout &lt;&lt; checkdate( 2,29, 2003) &lt;&lt; endl; // 0
  cout &lt;&lt; checkdate( 2,29, 2004) &lt;&lt; endl; // 1
  cout &lt;&lt; checkdate( 2,29, 2100) &lt;&lt; endl; // 0
  cout &lt;&lt; checkdate( 2,29, 2200) &lt;&lt; endl; // 0
  cout &lt;&lt; checkdate( 2,29, 2300) &lt;&lt; endl; // 0
  cout &lt;&lt; checkdate( 2,29, 2400) &lt;&lt; endl; // 1
  cout &lt;&lt; checkdate( 2,29, 2500) &lt;&lt; endl; // 0
  system(&quot;pause&quot;);
  return 0;
}

bool checkdate(int m, int d, int y)
{
  //gregorian dates started in 1582
  if (! (1582&lt;= y )  )//comment these 2 lines out if it bothers you
     return false;
  if (! (1&lt;= m &amp;&amp; m&lt;=12) )
     return false;
  if (! (1&lt;= d &amp;&amp; d&lt;=31) )
     return false;
  if ( (d==31) &amp;&amp; (m==2 || m==4 || m==6 || m==9 || m==11) )
     return false;
  if ( (d==30) &amp;&amp; (m==2) )
     return false;
  if ( (m==2) &amp;&amp; (d==29) &amp;&amp; (y%4!=0) )
     return false;
  if ( (m==2) &amp;&amp; (d==29) &amp;&amp; (y%400==0) )
     return true;
  if ( (m==2) &amp;&amp; (d==29) &amp;&amp; (y%100==0) )
     return false;
  if ( (m==2) &amp;&amp; (d==29) &amp;&amp; (y%4==0)  )
     return true;

  return true;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2337991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337991</guid><dc:creator><![CDATA[Tyle]]></dc:creator><pubDate>Wed, 10 Jul 2013 16:31:45 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 16:36:36 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>:<br />
Ich bezog mich auf cookies Aussage:</p>
<p>cooky451 schrieb:</p>
<blockquote>
<p>Zeile 15 und 17 machen keinen Sinn irgendwie.</p>
</blockquote>
<p>Nicht auf die Korrektheit der Funktion insgesamt.</p>
<p>Abgesehen davon habe ich bis jetzt noch keinen echten Fehler gefunden.<br />
<code>(29,2,2007)</code> wird bei mir jedenfalls zurückgewiesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337992</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 10 Jul 2013 16:36:36 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 16:38:19 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/30739">@Tyle</a>:<br />
Hast recht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337995</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 10 Jul 2013 16:38:19 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 16:42:22 GMT]]></title><description><![CDATA[<p>Evt. ist etwas anderes im Programm falsch?</p>
<p>Ich verwende ne Methode in der Klasse um die Ausgabe für die Monate in Strings zu konvertieren:</p>
<pre><code>//Zahlen in Monatsdaten konvertieren
string Datum::getMonatString() const
{
    switch (monat_)
    {
        case 1:
            return &quot;Januar&quot;;

        case 2:
            return &quot;Februar&quot;;

        case 3:
            return &quot;Maerz&quot;;

        case 4:
            return &quot;April&quot;;

        case 5:
            return &quot;Mai&quot;;

        case 6:
            return &quot;Juni&quot;;

        case 7:
            return &quot;Juli&quot;;

        case 8:
            return &quot;August&quot;;

        case 9:
            return &quot;September&quot;;

        case 10:
            return &quot;Oktober&quot;;

        case 11:
            return &quot;November&quot;;

        case 12:
            return &quot;Dezember&quot;;

        default:
            return &quot;Undefined&quot;;
    }
}
</code></pre>
<p>Sollte eigentlich nicht das Problem sein, da auch der normale getMonat nicht zurückgewiesen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337996</guid><dc:creator><![CDATA[Tyle]]></dc:creator><pubDate>Wed, 10 Jul 2013 16:42:22 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 16:55:06 GMT]]></title><description><![CDATA[<p>Wenn deine check-Funktion funktioniert und trotzdem (29,2,2007) [jetzt wohl (2,29,2007), da Du die Reihenfolge der Argumente im zweiten Beispiel geändert hast] akzeptiert wird, dann wirst Du sie wohl falsch benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338001</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 10 Jul 2013 16:55:06 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 17:01:23 GMT]]></title><description><![CDATA[<p>Was macht den der Standardkonstruktor noch außer das Standard Datum anlegen?</p>
<p>Warum zum Beispiel Anstelle von:</p>
<pre><code>if (! (1582&lt;= y )  )
</code></pre>
<p>nicht:</p>
<pre><code>if ( 1582 &gt; y )
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338003</guid><dc:creator><![CDATA[stefkowa]]></dc:creator><pubDate>Wed, 10 Jul 2013 17:01:23 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 17:02:35 GMT]]></title><description><![CDATA[<p>Ja das vermute ich auch.</p>
<p>Hier mal das Programm:</p>
<pre><code>//#include &quot;datum.hpp&quot;
//#include &quot;zeit.hpp&quot;
//#include &quot;termin.hpp&quot;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

class Datum {
private:
	//private Variablen Deklaration //
	unsigned int tag_;
	unsigned int monat_;
	unsigned int jahr_;

public:
	// Methoden Deklaration //
	void setTag(const int);
	void setMonat(const int);
	void setJahr(const int);
	int getTag() const;
	int getMonat() const;
    string getMonatString() const;
	int getJahr() const;

	// Konstruktor Deklaration //
	// Standard Konstruktor
	Datum(const int x=1, const int y=1, const int z=1900);
	// Überprüfungs Konstruktor
	Datum(unsigned int, unsigned int, unsigned int);

	// Überladungs Deklarationen //
	// Operator &lt;&lt;
	friend ostream &amp;operator&lt;&lt;(ostream &amp;, const Datum &amp;);
    //Operator &gt;&gt;
    friend istream &amp;operator&gt;&gt;(istream &amp;, const Datum &amp;);
	// Operator =
    Datum&amp; operator=(const Datum &amp;rh);
	// Operator ==
    bool operator==(const Datum &amp;r);
	// Operator +=
    Datum &amp;operator+=( int tage);

	// Methoden(Funktionen) Deklaration
	bool isValid(unsigned int, unsigned int, unsigned int);
    void makeValid();

};

// Set-Methoden Definitionen //
void Datum::setTag(const int x) {tag_=x; return;}
void Datum::setMonat(const int y) {monat_=y; return;}
void Datum::setJahr(const int z) {jahr_=z; return;}

// Get-Methoden Definitionen //
// Tag
int Datum::getTag() const 
{
	return tag_;
}
// Monat
int Datum::getMonat() const 
{
	return monat_;
}
// Jahr
int Datum::getJahr() const {
	return jahr_;
}

 //Zahlen in Monatsdaten konvertieren
string Datum::getMonatString() const
{
    switch (monat_)
    {
        case 1:
            return &quot;Januar&quot;;

        case 2:
            return &quot;Februar&quot;;

        case 3:
            return &quot;Maerz&quot;;

        case 4:
            return &quot;April&quot;;

        case 5:
            return &quot;Mai&quot;;

        case 6:
            return &quot;Juni&quot;;

        case 7:
            return &quot;Juli&quot;;

        case 8:
            return &quot;August&quot;;

        case 9:
            return &quot;September&quot;;

        case 10:
            return &quot;Oktober&quot;;

        case 11:
            return &quot;November&quot;;

        case 12:
            return &quot;Dezember&quot;;

        default:
            return &quot;Undefined&quot;;
    }
}

// Konstruktor Definitionen //
// Standardkonstruktor Definition
Datum::Datum(const int x, const int y, const int z) : tag_(x), monat_(y), jahr_(z)
{
    //...
	return;
}

// Konstruktor mit Überprüfung
Datum::Datum(unsigned int x, unsigned int y, unsigned int z)
{
	{
    if (!isValid(x,y,z))
    {
      cout &lt;&lt; &quot;Datum ist ungueltig!&quot;;
	  tag_ = 1;
	  monat_ = 1;
	  jahr_ = 1900;
    }
  }
}

// Überladungs Deklarationen
// Operator &gt;&gt;
istream &amp;operator&gt;&gt;(istream &amp;is, Datum &amp;z)
{
    unsigned int t, m, j;
    scanf(&quot;%i %i %i&quot;, &amp;t, &amp;m, &amp;j);

    z.setTag(t);
    z.setMonat(m);
    z.setJahr(j);
    return is;
}

// Operator &lt;&lt;
ostream&amp; operator&lt;&lt;(ostream &amp;os, const Datum &amp;z)
{
os &lt;&lt; z.getTag() &lt;&lt; &quot;.&quot; &lt;&lt;z.getMonatString() &lt;&lt; &quot;.&quot;&lt;&lt;z.getJahr();
return os;
}

// Operator =
Datum&amp; Datum::operator=(const Datum &amp;rh)
{
    this-&gt;tag_ = rh.tag_;
    this-&gt;monat_ = rh.monat_;
    this-&gt;jahr_ = rh.jahr_;

    return *this;
}

bool Datum::operator==(const Datum &amp;r)
{
	return this-&gt;getMonat() == r.getMonat() &amp;&amp; this-&gt;getTag() == r.getTag();
	//this-&gt;getJahr() == r.getJahr() &amp;&amp;  //Vergleiche auch Jahreszahlen
}

// Operator +=
Datum&amp; Datum::operator+=( int tage)
{
	tag_+= tage;

	/*if(!isValid()) makeValid();*/

	return *this;
}

bool Datum::isValid(unsigned int tag_, unsigned int monat_, unsigned int jahr_)
{
  if (! (1582&lt;= jahr_ )  )//ab aktuelle jahresberechnung
     return false;
  if (! (1&lt;= monat_ &amp;&amp; monat_&lt;=12) )// 12 monate checken
     return false;
  if (! (1&lt;= tag_ &amp;&amp; tag_&lt;=31) ) // tage unter 31 liegen
     return false;
  if ( (tag_==31) &amp;&amp; (monat_==2 || monat_==4 || monat_==6 || monat_==9 || monat_==11) ) // monate die keine 31 tage haben
     return false;
  if ( (tag_==30) &amp;&amp; (monat_==2) ) // februar hat keine 31 tage
     return false;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%4!=0) ) //februar auf schaltjahr prüfen - kein schaltjahr
     return false;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%400==0) ) //februar auf schaltjahr prüfen - ist schaltjahr
     return true;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%100==0) ) //februar auf schaltjahr prüfen - kein schaltjahr
     return false;
  if ( (monat_==2) &amp;&amp; (tag_==29) &amp;&amp; (jahr_%4==0)  ) //februar auf schlatjahr prüfen - ist schaltjahr
     return true;

  return true;
}

void Datum::makeValid()
{
    // TODO: Implement!
}

int main() {
  Datum d1;
  Datum d2(10,12,2012);

  cout &lt;&lt; &quot;Datum d1: &quot; &lt;&lt; d1 &lt;&lt; endl;
  cout &lt;&lt; &quot;Datum d2: &quot; &lt;&lt; d2 &lt;&lt; endl &lt;&lt; endl;

  cout &lt;&lt; &quot;Versuche d3 mit Datum 29.02.2007 anzulegen&quot; &lt;&lt; endl;
  Datum d3(29,2,2007);
  cout &lt;&lt; &quot;Datum d3: &quot; &lt;&lt; d3 &lt;&lt; endl &lt;&lt; endl;

  cout &lt;&lt; &quot;Vergleiche d1 mit d2 und d3: &quot; &lt;&lt; endl;
  cout &lt;&lt; &quot;d1==d2: &quot; &lt;&lt; (d1==d2) &lt;&lt; endl;
  cout &lt;&lt; &quot;d1==d3: &quot; &lt;&lt; (d1==d3) &lt;&lt; endl &lt;&lt; endl;

  cout &lt;&lt; &quot;Setze d1 auf Wert von d2&quot; &lt;&lt; endl;
  d1 = d2;
  cout &lt;&lt; &quot;Datum d1: &quot; &lt;&lt; d1 &lt;&lt; endl &lt;&lt; endl;

  cout &lt;&lt; &quot;Addiere 100 Tage zu d1&quot; &lt;&lt; endl;
  d1 += 100;
  cout &lt;&lt; &quot;Datum d1: &quot; &lt;&lt; d1 &lt;&lt; endl;
  cout &lt;&lt; &quot;Addiere 60 Tage zu d2&quot; &lt;&lt; endl;
  d2 += 60;
  cout &lt;&lt; &quot;Datum d2: &quot; &lt;&lt; d2 &lt;&lt; endl &lt;&lt; endl;

  cout &lt;&lt; &quot;Datum im Format \&quot;tt mm jjjj\&quot; eingeben: &quot;; cout.flush();
  cin &gt;&gt; d1;
  cout &lt;&lt; &quot;Speichere eingegebenes Datum in d1&quot; &lt;&lt; endl;
  cout &lt;&lt; &quot;Datum d1: &quot; &lt;&lt; d1 &lt;&lt; endl &lt;&lt; endl;  

  system(&quot;pause&quot;);
  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2338005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338005</guid><dc:creator><![CDATA[Tyle]]></dc:creator><pubDate>Wed, 10 Jul 2013 17:02:35 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 17:07:33 GMT]]></title><description><![CDATA[<blockquote>
<p>Warum zum Beispiel Anstelle von:</p>
<pre><code>if (! (1582&lt;= y )  )
</code></pre>
<p>nicht:</p>
<pre><code>if ( 1582 &gt; y )
</code></pre>
<p>?</p>
</blockquote>
<p>Hat doch den gleichen Effekt <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/2338007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338007</guid><dc:creator><![CDATA[Tyle]]></dc:creator><pubDate>Wed, 10 Jul 2013 17:07:33 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 17:13:35 GMT]]></title><description><![CDATA[<p>Eben. Wenn du eine Fehlermeldung haben möchtest, wenn das Jahr kleiner als 1582 ist, warum prüfst du dann erst ob es größer gleich ist und negierst dann das Ergebnis.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338009</guid><dc:creator><![CDATA[stefkowa]]></dc:creator><pubDate>Wed, 10 Jul 2013 17:13:35 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 17:19:58 GMT]]></title><description><![CDATA[<p>Gut die Schreibweise kompliziert das natürlich ändert aber nichts am Verhalten der Funktion.</p>
<p>Ist aber noch die Frage wo ich den Fehler bei der Abfrage gemacht habe <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/2338011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338011</guid><dc:creator><![CDATA[Tyle]]></dc:creator><pubDate>Wed, 10 Jul 2013 17:19:58 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 17:58:45 GMT]]></title><description><![CDATA[<p>Dein Konstruktor <code>Datum::Datum(unsigned int x, unsigned int y, unsigned int z)</code> wird nicht gerufen, weil 2007, 2 oder 29 ales <code>int</code> s sind. Tu den weg, und pack die Überprüfung in deinen Standardkonstruktor <code>Datum(const int x=1, const int y=1, const int z=1900)</code> .<br />
Außerdem schreien die vollkommen unsinnigen Bezeichner <code>x, y, z</code> für Tag, Monat, Jahr (oder war's jetzt Monat, Tag, Jahr???) nach Verwechslungen. In deinen beiden vorhergehenden Beispielen hattest Du auch zwei verschiedene Reihenfolgen der Argumente.</p>
<p>~edit: Typo.~</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338013</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 10 Jul 2013 17:58:45 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 17:29:02 GMT]]></title><description><![CDATA[<p>Ok ich werde drauf achten in Zukunft den Code lesbarer zu halten. Da hast du Recht, dass das sinnvoller ist.</p>
<p>Wenn ich die Abfrage in den Standardkonstruktor lege funktioniert die Abfrage.</p>
<p>Gibt es eine Möglichkeit die Abfrage in einen zweiten Konstruktor zu legen? Ich würde gerne einen Standardkonstruktor haben und einen modifizierten.</p>
<p>Zudem gibt es eine Möglichkeit MS-Visio so zu nutzen das ich das Programm Schritt für Schritt durchlaufe um besser Fehler zu finden?</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338016</guid><dc:creator><![CDATA[Tyle]]></dc:creator><pubDate>Wed, 10 Jul 2013 17:29:02 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 17:38:09 GMT]]></title><description><![CDATA[<p>Tyle schrieb:</p>
<blockquote>
<p>Gibt es eine Möglichkeit die Abfrage in einen zweiten Konstruktor zu legen? Ich würde gerne einen Standardkonstruktor haben und einen modifizierten.</p>
</blockquote>
<p>Welchen Zweck hätte es, ungültige Daten zuzulassen?</p>
<p>Tyle schrieb:</p>
<blockquote>
<p>Zudem gibt es eine Möglichkeit MS-Visio so zu nutzen das ich das Programm Schritt für Schritt durchlaufe um besser Fehler zu finden?</p>
</blockquote>
<p>-&gt; Debugger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338020</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 10 Jul 2013 17:38:09 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 17:43:12 GMT]]></title><description><![CDATA[<p>Mach eben einen Konstruktor ganz ohne Argumente, anstatt einem mit Defaultargumenten:</p>
<pre><code>Datum::Datum(): year(1900), day(1), month(1) { }

Datum::Datum(int year, int month, int day) { /* was auch immer */}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2338022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338022</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 10 Jul 2013 17:43:12 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 17:46:38 GMT]]></title><description><![CDATA[<p>Für das Programm ist es vollkommen ausreichend nur einen Konstruktor zu haben, das stimmt schon.</p>
<p>Nur soll das Programm 2 Konstruktor beinhalten, ich denke damit wir die Übleradung auch nutzen.</p>
<p>Anforderung:<br />
- Einen Standardkonstruktor der Objekte mit dem Datum 1.1.1900 initialisiert.</p>
<p>- Einen Konstruktor mit drei unsigned int-Parameter für Tag, Monat und Jahr<br />
und der überprüft ob das übergebene Datum valid ist, mit Fehlerausgabe und falls ein Fehler vorliegt das Datum mit 1.1.1900 anlegt.</p>
<p>Bisher habe ich (wenn ich den Standardkonstruktor entwerne nur den zweiten Konstruktor angelegt bis auf das der keine unsigned int Werte enthält.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338025</guid><dc:creator><![CDATA[Tyle]]></dc:creator><pubDate>Wed, 10 Jul 2013 17:46:38 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit Überprüfung on Wed, 10 Jul 2013 17:51:52 GMT]]></title><description><![CDATA[<p>Mach's doch einfach so:</p>
<p>SeppJ schrieb:</p>
<blockquote>
<pre><code>Datum::Datum(): year(1900), day(1), month(1) { }

Datum::Datum(int year, int month, int day) { /* was auch immer */}
</code></pre>
</blockquote>
<p>Nimm aus dem Konstruktor mit Überprüfung einfach die Defaultwerte raus und Du bist fertig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338028</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 10 Jul 2013 17:51:52 GMT</pubDate></item></channel></rss>