<?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[Datum erhöhen, die vierte Version]]></title><description><![CDATA[<p>Habe hier ein kleines Problem. Der Compiler sagt das Year: Kein geeigneter Standardkonstruktor verfügbar ist obwohl es schon in der Klasse Year den Konstruktor gibt.</p>
<pre><code class="language-cpp">class Year{
	static const int min = 1800;
	static const int max = 2200;
public:
	class Invalid {};
	Year(int x):y(x) {if(x&lt;min || max&gt;x) throw Invalid();} 
	int year() { return y;}
private:
	int y;
};

class Date{
public:
	enum Month{
		jan=1,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec
	};
	Date(Year y, Month m, int d);  // checking for valid date and does the initialization
	int day() { return d; }        
	void init_day(int n);          // increase Day with n value
private:
	Year y;
	Month m;
	int d;  // Day
};

Date::Date(Year y, Month m, int d)
{
	if(d&lt;1 || d&gt;31) { d = 0;}
	else
	{
		this-&gt;d = d;
	}
}	    

void f()
{
	Date today(Year (1978),Date::jun,25);
	cout &lt;&lt; today.day() &lt;&lt; endl;
}

int main()
{
    f();

    keep_window_open();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/280949/datum-erhöhen-die-vierte-version</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 22:37:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280949.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Jan 2011 14:51:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 14:51:55 GMT]]></title><description><![CDATA[<p>Habe hier ein kleines Problem. Der Compiler sagt das Year: Kein geeigneter Standardkonstruktor verfügbar ist obwohl es schon in der Klasse Year den Konstruktor gibt.</p>
<pre><code class="language-cpp">class Year{
	static const int min = 1800;
	static const int max = 2200;
public:
	class Invalid {};
	Year(int x):y(x) {if(x&lt;min || max&gt;x) throw Invalid();} 
	int year() { return y;}
private:
	int y;
};

class Date{
public:
	enum Month{
		jan=1,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec
	};
	Date(Year y, Month m, int d);  // checking for valid date and does the initialization
	int day() { return d; }        
	void init_day(int n);          // increase Day with n value
private:
	Year y;
	Month m;
	int d;  // Day
};

Date::Date(Year y, Month m, int d)
{
	if(d&lt;1 || d&gt;31) { d = 0;}
	else
	{
		this-&gt;d = d;
	}
}	    

void f()
{
	Date today(Year (1978),Date::jun,25);
	cout &lt;&lt; today.day() &lt;&lt; endl;
}

int main()
{
    f();

    keep_window_open();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2011195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011195</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Mon, 24 Jan 2011 14:51:55 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 15:03:58 GMT]]></title><description><![CDATA[<p>Standardkonstruktor bedeutet Konstruktor ohne Argumente. Du könntest:<br />
a) Einen zur Verfügung stellen<br />
b) Dem Parameter deines jetzigen Konstruktors einen Standardwert verpassen<br />
c) Die unnötige Benutzung des Standardkonstruktors wegmachen indem du beim Konstruktor von Date eine Initialisierungsliste benutzt.</p>
<p>Das letzte wäre wohl das sauberste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011207</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 24 Jan 2011 15:03:58 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 15:13:38 GMT]]></title><description><![CDATA[<p>Unter c meinst du das?</p>
<pre><code class="language-cpp">(Year y, Month m, int d)
</code></pre>
<p>Also Year und Month sollten weg? Und druch int y und int m ausgetauscht werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011215</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Mon, 24 Jan 2011 15:13:38 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 15:21:43 GMT]]></title><description><![CDATA[<p>winux schrieb:</p>
<blockquote>
<p>Unter c meinst du das?</p>
<pre><code class="language-cpp">(Year y, Month m, int d)
</code></pre>
<p>Also Year und Month sollten weg? Und druch int y und int m ausgetauscht werden?</p>
</blockquote>
<p>Nein, so (Zeile 26):</p>
<pre><code class="language-cpp">Date::Date(Year y, Month m, int d): y(y), m(m), d(d)
</code></pre>
<p>Das nennt man eine Initialisierungsliste. Damit kann man gezielt bestimmte Konstruktoren von Membervariablen aufrufen. Das ist ein ungeheuer wichtiges Sprachmittel und kommt in deinem Buch bestimmt bald dran.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011221</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 24 Jan 2011 15:21:43 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 15:24:54 GMT]]></title><description><![CDATA[<p>Das habe ich schon mal gemacht und es gab einen Programm absturz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011227</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Mon, 24 Jan 2011 15:24:54 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 15:28:13 GMT]]></title><description><![CDATA[<p>Weil deine Abfrage im Konstruktor falsch ist, und invalid getrowed wird.</p>
<pre><code class="language-cpp">max&gt;x
</code></pre>
<p>-&gt; immer throw</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011230</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Mon, 24 Jan 2011 15:28:13 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 15:32:50 GMT]]></title><description><![CDATA[<p>Genau das war das Problem wieder ein schreib Fehler. OK das Programm lauft aber jetzt brauche ich eure Hilfe was könnte man in class Invalid schreiben wenn der Wert von Year nicht korrekt ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011233</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Mon, 24 Jan 2011 15:32:50 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 15:34:39 GMT]]></title><description><![CDATA[<p>Glueck verschenken, selber denken ....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011235</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 24 Jan 2011 15:34:39 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 15:48:00 GMT]]></title><description><![CDATA[<p>Um class Invalid wird später etwas gemacht, aber wieso wir ein ungültiges Wert ausgegeben obwohl das im Date Konstruktor eine Prüfung geschrieben wurde??</p>
<pre><code class="language-cpp">Date::Date(Year y, Month m, int d):y(y), m(m), d(d)
{
	if(d&lt;1 || d&gt;31) { d = 0; }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2011253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011253</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Mon, 24 Jan 2011 15:48:00 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 15:49:35 GMT]]></title><description><![CDATA[<p>Die Lösung war:</p>
<pre><code class="language-cpp">Date::Date(Year y, Month m, int d):y(y), m(m), d(d)
{
    if(d&lt;1 || d&gt;31) { this-&gt;d = 0; }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2011257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011257</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Mon, 24 Jan 2011 15:49:35 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 15:49:53 GMT]]></title><description><![CDATA[<p>Weil du lokal d deklariert hast, und somit den Klassenmember verdeckst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011258</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Mon, 24 Jan 2011 15:49:53 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 16:36:25 GMT]]></title><description><![CDATA[<p>Ich habe bis jetzt noch nie mit Memberklassen gearbeitet, wenn ich das schreibe bekomme ich Compiler Fehler.</p>
<pre><code class="language-cpp">Year::Invalid()
{
	cout &lt;&lt; 0;
}
</code></pre>
<p>Übrigens muss man bei Invalid nichts machen, hab es nochmal die Aufgabe gelesen, Invalid muss einen Lauftzeitfehler ausgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011280</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Mon, 24 Jan 2011 16:36:25 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 16:34:48 GMT]]></title><description><![CDATA[<p>Jetzt eine andere Frage warum kann man nicht folgendes schreiben:</p>
<pre><code class="language-cpp">ostream&amp; operator&lt;&lt;(ostream&amp; os, const Date&amp; d)
</code></pre>
<p>Wenn ich das schreibe bekomme ich einen Compiler Fehler, hat das mit dem this-&gt; zu tun oder das man eine Parametervariable d und eine Membervariable d gibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011304</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Mon, 24 Jan 2011 16:34:48 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 17:02:26 GMT]]></title><description><![CDATA[<p>Wenn du das innerhalb der Klasse machen willst, dann muss es ein friend operator sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011328</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Mon, 24 Jan 2011 17:02:26 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 17:05:57 GMT]]></title><description><![CDATA[<p>Ich meine ich kann Date&amp; d nicht als const setzen. Der Compiler sagt Date::day :this-Zeiger kann nicht von const Date in Date&amp; konvertiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011329</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Mon, 24 Jan 2011 17:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 17:16:17 GMT]]></title><description><![CDATA[<p>Zeig doch mal was du hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011333</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Mon, 24 Jan 2011 17:16:17 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 17:22:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Year{
	static const int min = 1800;
	static const int max = 2200;
public:
	class Invalid {};
	Year(int x):y(x) {if(x&lt;min || max&lt;x) throw Invalid();} 
	int year() { return y;}
private:
	int y;
};

class Date{
public:
	enum Month{
		jan=1,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec
	};
	Date(Year y, Month m, int d);  // checking for valid date and does the initialization
	int day() { return d; }        
	void add_day(int n);          // increase Day with n value
private:
	Year y;
	Month m;
	int d;  // Day
};

Date::Date(Year y, Month m, int d):y(y), m(m), d(d)
{
	if(d&lt;1 || d&gt;31) { this-&gt;d = 0; }
}	  

void Date::add_day(int n)
{
	if(d + n &gt;= 32) { d = 0;} 
	else {d = d + n;}
}

ostream&amp; operator&lt;&lt;(ostream&amp; os, Date&amp; d) // hier statt Date&amp; d könnte
{                                         // const Date&amp; d stechen 
    return os &lt;&lt; '&quot;' &lt;&lt; d.day() &lt;&lt; '&quot;' ; 
} 

void f()
{
	Date today(Year (1978),Date::jun,25);
	cout &lt;&lt; today &lt;&lt; endl;

	Date tomorrow = today;
	tomorrow.add_day(1);
	cout &lt;&lt; tomorrow &lt;&lt; endl;

	Date non = today;
	non.add_day(12);
	cout &lt;&lt; non &lt;&lt; endl;

	Date non2(Year (2000),Date::mar,-56);
	cout &lt;&lt; non2 &lt;&lt; endl;
}

int main()
try{
    f();

    keep_window_open();
    return 0;
}
catch (runtime_error e) {    
    cout &lt;&lt; e.what() &lt;&lt; '\n'; 
    keep_window_open(&quot;~&quot;);    
} 
catch (...) {    
    cout &lt;&lt; &quot;exiting\n&quot;; 
    keep_window_open(&quot;~&quot;);    
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2011338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011338</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Mon, 24 Jan 2011 17:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 17:33:23 GMT]]></title><description><![CDATA[<p>Du Funktion day muss natürlich auch const sein, wenn du über eine const&amp; darauf zureifen willst, wäre ja blöd, wenn diese Funktion etwas verändern würde, obwohl es eigentlich const sein sein muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011346</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Mon, 24 Jan 2011 17:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 17:34:09 GMT]]></title><description><![CDATA[<p>Dies ist ein Fehler in der const-Correctness:</p>
<p>Dein operator&lt;&lt; benutzt d.day(). Du willst, dass d konstant sein darf, daher darf d.day() das d nicht verändern. Dies kann der Compiler an der Stelle aber nicht sicher prüfen ob dies tatsächlich der Fall ist. Um ihm mitzuteilen, dass d.day() das d nicht verändert, musst du weiter oben</p>
<pre><code class="language-cpp">int day() const { return d; }
</code></pre>
<p>schreiben.</p>
<p>Milde Warnung: const-Correctness ist ansteckend. Wenn du erst einmal anfängst an einer Stelle const zu setzen dann wirst du (wie hier) nach und nach gezwungen an vielen anderen Stellen const zu setzen. Lass dich aber davon nicht abschrecken. Const-Correctness hilft dir dabei, korrekte Programme zu schreiben, weil es (wie das Typensystem) dem Compiler ermöglicht, gewisse Fehler in der Programmlogik zu erkennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011347</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 24 Jan 2011 17:34:09 GMT</pubDate></item><item><title><![CDATA[Reply to Datum erhöhen, die vierte Version on Mon, 24 Jan 2011 17:36:41 GMT]]></title><description><![CDATA[<p>Und wieder was gelernt, dank auch ist jetzt alles klar und man kann hier im Forum viel neues lernen. Danke nochmals an alle für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011351</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Mon, 24 Jan 2011 17:36:41 GMT</pubDate></item></channel></rss>