<?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[Schnittstelle oder wie?]]></title><description><![CDATA[<p>Moin Moin! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<pre><code class="language-cpp">int _tmain(int argc, _TCHAR* argv[]) //Argument wird übergeben (0, sonst)
	....
	if(argv[1]==0){
		CKlasseFall_Null A;	//A lokal angelegt
	}
	else{
		CKlasseFall_Sonst A;	//A lokal angelegt
	}

	A.Funktion();	//Problem: A ist hier unbekannt

	return 0;
}
</code></pre>
<p>Der Code zeigt schon mein Problem. Ich hab zwei mögliche Fälle (0, sonst) und will davon abhängig ein Objekt der einen oder anderen Klasse anlegen, daher die if-Abfrage. Leider ist die Klasse lokal angelegt und damit außerhalb des if-Blockes unbekannt. Wie löst man denn so ein Problem in C++?</p>
<p>Vielen Dank <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/topic/240661/schnittstelle-oder-wie</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 20:53:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240661.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 09 May 2009 16:54:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sat, 09 May 2009 16:54:56 GMT]]></title><description><![CDATA[<p>Moin Moin! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<pre><code class="language-cpp">int _tmain(int argc, _TCHAR* argv[]) //Argument wird übergeben (0, sonst)
	....
	if(argv[1]==0){
		CKlasseFall_Null A;	//A lokal angelegt
	}
	else{
		CKlasseFall_Sonst A;	//A lokal angelegt
	}

	A.Funktion();	//Problem: A ist hier unbekannt

	return 0;
}
</code></pre>
<p>Der Code zeigt schon mein Problem. Ich hab zwei mögliche Fälle (0, sonst) und will davon abhängig ein Objekt der einen oder anderen Klasse anlegen, daher die if-Abfrage. Leider ist die Klasse lokal angelegt und damit außerhalb des if-Blockes unbekannt. Wie löst man denn so ein Problem in C++?</p>
<p>Vielen Dank <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/1708245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708245</guid><dc:creator><![CDATA[xtr23]]></dc:creator><pubDate>Sat, 09 May 2009 16:54:56 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sat, 09 May 2009 17:03:21 GMT]]></title><description><![CDATA[<p>Stichwort: Abstrakte Klasse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708246</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sat, 09 May 2009 17:03:21 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sat, 09 May 2009 19:25:04 GMT]]></title><description><![CDATA[<p>btw:<br />
<code>if(argv[1]==0){</code><br />
du prüfst aber vorher schon, ob argc &gt; 1 bzw &gt;= 2 ist?!</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708299</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 09 May 2009 19:25:04 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sat, 09 May 2009 20:31:48 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>btw:<br />
<code>if(argv[1]==0){</code><br />
du prüfst aber vorher schon, ob argc &gt; 1 bzw &gt;= 2 ist?!</p>
<p>bb</p>
</blockquote>
<p>In meinen Augen beinhaltet sonst alles ausser 0 also passt das doch??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708320</guid><dc:creator><![CDATA[KILLERQUEEN]]></dc:creator><pubDate>Sat, 09 May 2009 20:31:48 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sat, 09 May 2009 21:00:03 GMT]]></title><description><![CDATA[<p>Ich hoffe mal, ich verstehe deinen unvollständigen Satz richtig.</p>
<p>Wenn argc == 1 ist, dann ist ein Zugriff auf argv[1] undefiniertes Verhalten. Da kann alles Mögliche stehen, auch 0.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708324</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 09 May 2009 21:00:03 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sat, 09 May 2009 21:51:46 GMT]]></title><description><![CDATA[<p>Das Programm darf genauso gut in einem Absturz enden oder irgendein merkwürdiges Verhalten aufweisen. Von daher ist das Zugreifen über Array-Grenzen hinweg nie gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708336</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 09 May 2009 21:51:46 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sat, 09 May 2009 23:16:21 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>Stichwort: Abstrakte Klasse</p>
</blockquote>
<p>Wenn sich das Verhalten von CKlasse_ aendert bei unterschiedlichen argumenten vielleicht noch auch soetwas:</p>
<pre><code class="language-cpp">int main (int argc, char **argv)
{
    CKlasse *pCKlasse;

    pCKlasse = new CKlasse (argc, argv);

    pCKlasse-&gt;MachWas ();

    // ...

    delete pCKlasse;
}
</code></pre>
<p>Wobei im ueberlagerten new-Operator die Klasse entsprechend initalisiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708350</guid><dc:creator><![CDATA[hartmut1164]]></dc:creator><pubDate>Sat, 09 May 2009 23:16:21 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sat, 09 May 2009 23:33:21 GMT]]></title><description><![CDATA[<blockquote>
<p>Wobei im ueberlagerten new-Operator die Klasse entsprechend initalisiert wird.</p>
</blockquote>
<p>Ehm, Du meinst wohl Konstruktor, nicht new Operator.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708354</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sat, 09 May 2009 23:33:21 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sun, 10 May 2009 00:37:29 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<blockquote>
<p>Wobei im ueberlagerten new-Operator die Klasse entsprechend initalisiert wird.</p>
</blockquote>
<p>Ehm, Du meinst wohl Konstruktor, nicht new Operator.</p>
</blockquote>
<p>Ja - Idiot (recursive).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708359</guid><dc:creator><![CDATA[hartmut1164]]></dc:creator><pubDate>Sun, 10 May 2009 00:37:29 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sun, 10 May 2009 12:11:43 GMT]]></title><description><![CDATA[<p>Abstrakte Klassen klingt eigentlich ganz gut, aber das Problem bleibt trotzdem bestehen. Objekt A ist nur lokal innerhalb des if-Blockes bekannt.</p>
<p>Ich hab das Problem gelöst indem ich die Methoden von A auch innerhalb des if-Blockes aufrufe. Allerdings hab ich da Code mehrfach drin und das sollte ja vermieden werden.</p>
<pre><code class="language-cpp">int _tmain(int argc, _TCHAR* argv[]) //Argument wird übergeben (0, sonst) 
    //....
    if(Fall A){ 
        CKlasseFall_A A;
        A.getSize();
        A.read();
        A.print();
        //...
    } 
    else{ //Fall B
        CKlasseFall_B A;
        A.getSize();
        A.read();
        A.print();
        //...
    } 

    return 0; 
}
</code></pre>
<p><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/1708446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708446</guid><dc:creator><![CDATA[xtr23]]></dc:creator><pubDate>Sun, 10 May 2009 12:11:43 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sun, 10 May 2009 12:36:38 GMT]]></title><description><![CDATA[<p>Nee du hast das system von Abstrakten Klassen nicht verstanden.</p>
<pre><code class="language-cpp">class Basis
{
  public:
   virtual void getSize()=0;
}

class KlasseA : public Basis
{
   void getSize()
   {
      //berechne sachen für A

    }
}

class KlasseB : public Basis
{
   void getSize()
   {
      //berechne sachen für B

    }
}
</code></pre>
<p>Main.cpp</p>
<pre><code class="language-cpp">int main(/*irgendwas*/)
{
  Basis *zeiger;

  if(/*irgendwas*/)
     zeiger = new KlasseA()
  else if(*/irgendwas*/)
     zeiger = new KlasseB()

  //und der Aufruf
    zeiger-&gt;getSize();
  //hier wird nun jenachdem welche Klasse erzeugt wurde, die funktion für diese Klasse aufgerufen
 //informier dich mal bisschen über Polymorphismus

delete zeiger;
}
</code></pre>
<p>edit:delete zeiger ergänzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708455</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 10 May 2009 12:36:38 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sun, 10 May 2009 12:35:27 GMT]]></title><description><![CDATA[<blockquote>
<p>Abstrakte Klassen klingt eigentlich ganz gut, aber das Problem bleibt trotzdem bestehen. Objekt A ist nur lokal innerhalb des if-Blockes bekannt.</p>
</blockquote>
<p>klingen gut... obwohl du nicht weist, was es ist!? Oo</p>
<pre><code class="language-cpp">int main (int argc, char **argv)
{
    Tclass *A;
    if (argc &gt;= 2)
       A = new Tclass_fall_a(argv[1]);
    else
       A = new Tclass_null();

    A-&gt;do_something();

    delete A;
}
</code></pre>
<p>alternativ würde (je nach gegebenheiten) auch folgendes gehen:</p>
<pre><code class="language-cpp">int main (int argc, char **argv)
{
    Tclass A;
    if (argc &gt;= 2)
       A = Tclass_fall_a(argv[1]);
    else
       A = Tclass_null();

    A.do_something();
}
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708458</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 10 May 2009 12:35:27 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sun, 10 May 2009 13:04:51 GMT]]></title><description><![CDATA[<p>&quot;Heureka, es funktioniert!!&quot; (um mal Volkard zu zitieren..)</p>
<p>Dank Firefighter's Ausführungen habe auch ich als noob es hinbekommen.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>War ja gar nicht so schwer. Vielen Dank an alle für die Hilfe!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<blockquote>
<p>klingen gut... obwohl du nicht weist, was es ist!? Oo</p>
</blockquote>
<p>Ja. Nach dem Stichwort von Firefighter hab ich im Buch darüber gelesen und das schien zu passen. Abstrakte Klassen als Interface. Aber lesen und dann richtig anwenden, das ist mir alleine nicht gelungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708470</guid><dc:creator><![CDATA[xtr23]]></dc:creator><pubDate>Sun, 10 May 2009 13:04:51 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sun, 10 May 2009 14:22:29 GMT]]></title><description><![CDATA[<p>Übrigens gehen in dem Fall auch Templates:</p>
<pre><code class="language-cpp">template &lt;typename FallKlasseT&gt;
void BehandleFall()
{
    FallKlasseT obj;
    obj.getSize();
    obj.read();
    obj.print();
}

int main()
{
    //...
    if (FallA)
        BehandleFall&lt;FallKlasseA&gt;();
    else
        BehandleFall&lt;FallKlasseB&gt;();
}

}
</code></pre>
<p>Das ganze ist aber nicht so dynamisch wie die Lösung mit den abstrakten Klassen (statische vs. dynamische Polymorphie). Dafür kannst du jede Klasse mit entsprechendem Interface benutzen ohne von einer gemeinsamen Basisklasse abzuleiten und virtuellen Methoden zu überschreiben.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708498</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sun, 10 May 2009 14:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sun, 10 May 2009 14:24:42 GMT]]></title><description><![CDATA[<p>Don06 schrieb:</p>
<blockquote>
<p>Übrigens gehen in dem Fall auch Templates:</p>
<pre><code class="language-cpp">template &lt;typename FallKlasseT&gt;
void BehandleFall()
{
    FallKlasseT obj;
    obj.getSize();
    obj.read();
    obj.print();
}

int main()
{
    //...
    if (FallA)
        BehandleFall&lt;FallKlasseA&gt;();
    else
        BehandleFall&lt;FallKlasseB&gt;();
}

}
</code></pre>
<p>Das ganze ist aber nicht so dynamisch wie die Lösung mit den abstrakten Klassen (statische vs. dynamische Polymorphie). Dafür kannst du jede Klasse mit entsprechendem Interface benutzen ohne von einer gemeinsamen Basisklasse abzuleiten und virtuellen Methoden zu überschreiben.</p>
<p>Gruß<br />
Don06</p>
</blockquote>
<p>Nur blöd wenn ich da einen nativen Datentyp übergebe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708499</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 10 May 2009 14:24:42 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sun, 10 May 2009 14:57:06 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>Nur blöd wenn ich da einen nativen Datentyp übergebe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Was meinst du? Ein nativer Typ kann auch nicht von einer abtrakten Basisklasse erben. Natürlich könnte man noch durch eine weitere Abstraktionsebene (z.B. Traits, Concept Maps) eingebaute Typen erlauben. Allerdings glaube ich, dass das hier nicht nötig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708519</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sun, 10 May 2009 14:57:06 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittstelle oder wie? on Sun, 10 May 2009 15:00:11 GMT]]></title><description><![CDATA[<p>Don06 schrieb:</p>
<blockquote>
<p>Firefighter schrieb:</p>
<blockquote>
<p>Nur blöd wenn ich da einen nativen Datentyp übergebe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Was meinst du? Ein nativer Typ kann auch nicht von einer abtrakten Basisklasse erben. Natürlich könnte man noch durch eine weitere Abstraktionsebene (z.B. Traits, Concept Maps) eingebaute Typen erlauben. Allerdings glaube ich, dass das hier nicht nötig ist.</p>
</blockquote>
<p>er redet von PODs, wie int/float/...<br />
aber das is ja normal, dass man templates _immer_ mit falschen typen füttern kann - also nix besonderes...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708520</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 10 May 2009 15:00:11 GMT</pubDate></item></channel></rss>