<?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[Objekt erzeugen.. (fehlerfall im Konstruktor) ?]]></title><description><![CDATA[<p>Habe eine klasse aus der ich instanzen erzeuge, nun wird im Kontruktor aus den übergabeparameter ermittel das diese falsch sind... nun soll theoritsch kein Objekt erzeugt werden, was so nicht geht..</p>
<p>Was gibts für lösungen umd diese Problem zu umgehen?</p>
<pre><code class="language-cpp">class A{

A(int i){

  if( i=0)
    //Abrruch? 
  }

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/176579/objekt-erzeugen-fehlerfall-im-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 14:11:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176579.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Mar 2007 15:01:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekt erzeugen.. (fehlerfall im Konstruktor) ? on Thu, 22 Mar 2007 15:01:42 GMT]]></title><description><![CDATA[<p>Habe eine klasse aus der ich instanzen erzeuge, nun wird im Kontruktor aus den übergabeparameter ermittel das diese falsch sind... nun soll theoritsch kein Objekt erzeugt werden, was so nicht geht..</p>
<p>Was gibts für lösungen umd diese Problem zu umgehen?</p>
<pre><code class="language-cpp">class A{

A(int i){

  if( i=0)
    //Abrruch? 
  }

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1250554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250554</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 22 Mar 2007 15:01:42 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erzeugen.. (fehlerfall im Konstruktor) ? on Thu, 22 Mar 2007 15:12:25 GMT]]></title><description><![CDATA[<p>Exceptions</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250565</guid><dc:creator><![CDATA[Vertexwahn]]></dc:creator><pubDate>Thu, 22 Mar 2007 15:12:25 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erzeugen.. (fehlerfall im Konstruktor) ? on Thu, 22 Mar 2007 15:17:59 GMT]]></title><description><![CDATA[<p>Oder prüf vor Instantiierung, ob der Parameter valide ist. Meinetwegen per static-Member-Methode von A oder mit 'ner normalen Funktion:</p>
<pre><code class="language-cpp">class A {
public:
  static bool isValid(int i) {
    if (deineBedinungWahrIst)
      return true;
    return false;
  }

  //Rest deiner Klasse

};

//irgendwo in main:
if (A::isValid(7));
  A myA(7);
</code></pre>
<p>MfG</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250568</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Thu, 22 Mar 2007 15:17:59 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erzeugen.. (fehlerfall im Konstruktor) ? on Thu, 22 Mar 2007 15:19:11 GMT]]></title><description><![CDATA[<p>sowas habe ich mir schon gedacht:)</p>
<p>In Punkte Exceptions hab ich mir etwas eingelesen.. so weit ich weis kann man sog. Exceptions klassen machen, welceh best. fälle beabeiten..! Nun frag ich mich ob man für jede klasse die exception benutzt auch eine extra Exceptionskasse erzeugen muss...</p>
<p>Edit: <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6287">@GPC</a>: ja sieht ziemlich gerissen aus;) aber ich Glaube excpetions sind etwa Edler oder;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250570</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 22 Mar 2007 15:19:11 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erzeugen.. (fehlerfall im Konstruktor) ? on Thu, 22 Mar 2007 15:19:43 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>sowas habe ich mir schon gedacht:)</p>
<p>In Punkte Exceptions hab ich mir etwas eingelesen.. so weit ich weis kann man sog. Exceptions klassen machen, welceh best. fälle beabeiten..! Nun frag ich mich ob man für jede klasse die exception benutzt auch eine extra Exceptionskasse erzeugen muss...</p>
</blockquote>
<p>nö nich jede Klasse die eine Exception benutzen will braucht eine eigen - du kannst z. b. für alle deine Klassen die Exception std::exception verwenden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250571</guid><dc:creator><![CDATA[Vertexwahn]]></dc:creator><pubDate>Thu, 22 Mar 2007 15:19:43 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erzeugen.. (fehlerfall im Konstruktor) ? on Thu, 22 Mar 2007 15:38:39 GMT]]></title><description><![CDATA[<p>Hi Boris,</p>
<p>erstmal: Werfen kann man alles (was keinen privaten CopyCtor hat).<br />
Wenn einen der wilde Affe beißst, kann man sogar seine Returnwertrückgabe statt über return über throw machen (mit Referenzen klappts aber &quot;leider&quot; nicht) ... nettes Feature dabei: Es macht der damit weiter, der den Typ fängt und das ist nicht unbedingt der direkte Aufrufer der Funktion. <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>
<p>Ich würde zwar dringend davon abraten, aber es zeigt, dass es quasi keine (durch die Sprache vorgegebene) Anforderung an das gibt, was man wirft.</p>
<p>Sinnvoll aber ist es, entweder die stdexcep-Teile (aus dem gleichnahmigen Header) zu verwenden (man darf auch einfach einen <code>std::runtime_error(&quot;Mein Fehlertext&quot;)</code> werfen) , oder von ihnen abzuleiten - aber unbedingt notwendig nicht.</p>
<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>...<br />
Edit: <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6287">@GPC</a>: ja sieht ziemlich gerissen aus;) aber ich Glaube excpetions sind etwa Edler oder;)</p>
</blockquote>
<p>Vor allem: Es verschiebt einen Teil der Verantwortung nach Außen, ohne wirklich das Problem zu lösen ! Was, wenn im Konstruktor nun festgestellt wird, dass &quot;isValid()&quot; nicht zutrifft ? Abbrechen ? ...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250595</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 22 Mar 2007 15:38:39 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erzeugen.. (fehlerfall im Konstruktor) ? on Thu, 22 Mar 2007 15:45:11 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>...<br />
Edit: <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6287">@GPC</a>: ja sieht ziemlich gerissen aus;) aber ich Glaube excpetions sind etwa Edler oder;)</p>
</blockquote>
<p>Vor allem: Es verschiebt einen Teil der Verantwortung nach Außen, ohne wirklich das Problem zu lösen ! Was, wenn im Konstruktor nun festgestellt wird, dass &quot;isValid()&quot; nicht zutrifft ? Abbrechen ? ...</p>
</blockquote>
<p>Äh, wenn isValid true für Parameter zurückliefert, die eigentlich false liefern müssten, wurde bei der Implementation von isValid geschlampt. Nicht mehr und nicht weniger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250603</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Thu, 22 Mar 2007 15:45:11 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erzeugen.. (fehlerfall im Konstruktor) ? on Thu, 22 Mar 2007 15:59:38 GMT]]></title><description><![CDATA[<p>GPC schrieb:</p>
<blockquote>
<p>...<br />
Äh, wenn isValid true für Parameter zurückliefert, die eigentlich false liefern müssten, wurde bei der Implementation von isValid geschlampt. Nicht mehr und nicht weniger.</p>
</blockquote>
<p>Das meinte ich nicht, sondern den Fall:</p>
<pre><code class="language-cpp">class A {
  int* p;
public:
  static bool isValid(int i) {
    return deineBedinungWahrIst;
  }
  A(int i) {
     if(isValid(i)) { // sollte dieselbe Prüfung gemacht werden und keine andere
        p = new int[i];
     }
     else .... // äh, ja was hier ?
  }
  //Rest deiner Klasse
};
</code></pre>
<p>Damit steht der A-Progrmmierer vor derselben Frage wie vorher: Was, wenn ich Daten erhalten, mit denen ich kein gültiges Objekt erzeugen kann ?</p>
<p>Und der A-Nutzer ist gezwungen, jedesmal selbst die Prüfung (mit evtl. Fehlerhandling) zu machen, was Aufwand und Risiko bedeutet:</p>
<pre><code class="language-cpp">//irgendwo in main:
int i = 7;
if (A::isValid(i) &amp;&amp; saeckeweise &amp;&amp; andere &amp;&amp; Conditions &amp;&amp; gehtFunktionGeht(i)) {
  Viel();
  was();
  noch();
  getan(i); // getan ändert leider i
  werden();
  muss();
  ...
  // 10.000 Zeilen später
  ...
  A myA(i); // Hupps hier hat i gar nbicht mehr den oben getesteten Wert !
  ....
</code></pre>
<p>Ich habe also nichts gegen eine isValid()-Funktion, aber ich bin skeptisch, dass sie in diesem Zusammenhang wirklich eine hilfreiche Alternative ist.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250610</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 22 Mar 2007 15:59:38 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erzeugen.. (fehlerfall im Konstruktor) ? on Thu, 22 Mar 2007 16:02:28 GMT]]></title><description><![CDATA[<p>Ach so. Das ist was anderes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250616</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Thu, 22 Mar 2007 16:02:28 GMT</pubDate></item></channel></rss>