<?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[Instanzenweiche c++]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Problem:<br />
ich habe zwei unterschiedliche Objekte ObjektA und ObjektB. Je nach einem Flag das dem Programm übergeben wird soll einer Variablen sa eine Instanz von ObjektA oder ObjektB zugeordnet werden, also dem Sinn nach</p>
<p>if (flag)<br />
{ObjektA* sa=new ObjejtA();}<br />
else<br />
{ObjektB* sa=new ObjektB();}</p>
<p>Ich möchte mit der Variablen sa weiterarbeiten. Das funktioniert aber nicht, weil sa nur innerhalb der if-Schleife Gültigkeit hat. Wie kann ich das Problem lösen?<br />
Vielen Dank<br />
Viele Grüße<br />
Conny</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/255559/instanzenweiche-c</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 23:42:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/255559.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Dec 2009 10:36:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 10:36:46 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Problem:<br />
ich habe zwei unterschiedliche Objekte ObjektA und ObjektB. Je nach einem Flag das dem Programm übergeben wird soll einer Variablen sa eine Instanz von ObjektA oder ObjektB zugeordnet werden, also dem Sinn nach</p>
<p>if (flag)<br />
{ObjektA* sa=new ObjejtA();}<br />
else<br />
{ObjektB* sa=new ObjektB();}</p>
<p>Ich möchte mit der Variablen sa weiterarbeiten. Das funktioniert aber nicht, weil sa nur innerhalb der if-Schleife Gültigkeit hat. Wie kann ich das Problem lösen?<br />
Vielen Dank<br />
Viele Grüße<br />
Conny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816358</guid><dc:creator><![CDATA[Conny2]]></dc:creator><pubDate>Wed, 02 Dec 2009 10:36:46 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 10:46:41 GMT]]></title><description><![CDATA[<p>die variable einfach davor deklarieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816362</guid><dc:creator><![CDATA[player4245]]></dc:creator><pubDate>Wed, 02 Dec 2009 10:46:41 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 11:08:30 GMT]]></title><description><![CDATA[<p>Ich weiß ja nicht, als was ich die Variable deklarieren soll, da es sich ja erst zur Laufzeit entscheidet, um welches Objekt es sich handelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816370</guid><dc:creator><![CDATA[Conny2]]></dc:creator><pubDate>Wed, 02 Dec 2009 11:08:30 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 11:16:51 GMT]]></title><description><![CDATA[<p>So wie du es auch in den If-Blöcken gemacht hast:</p>
<pre><code class="language-cpp">ObjektA* sa = 0;
ObjektB* sb = 0;

if (flag)
{
 sa=new ObjejtA();
}
else
{
 sb=new ObjektB();
}
</code></pre>
<p>Wobei ich mal vermute, das du eine Basisklasse für ObjektA und ObjektB hast? Dann sowas:</p>
<pre><code class="language-cpp">ObjektBasis* sa = 0;

if (flag)
{
 sa=new ObjejtA();
}
else
{
 sa=new ObjektB();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1816372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816372</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 02 Dec 2009 11:16:51 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 11:16:58 GMT]]></title><description><![CDATA[<p>Dann definiere ein Interface.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816373</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Wed, 02 Dec 2009 11:16:58 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 11:46:58 GMT]]></title><description><![CDATA[<p>Wenn die beiden Datentypen ObjektA und ObjektB nichts miteinander zu tun haben (also nicht von einer gemeinsamen Basisklasse ableiten, dann geht das so, wie du es dir vorstellst, nicht. C++ ist typisiert. Man kann nicht einfach sagen: &quot;Wenn Bedingung 1 erfüllt ist, soll x ein String sein, ansonsten soll x ein DataReader sein.&quot; Es sei denn, du arbeitest mit void*, aber dann musst du jedes mal konvertieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816386</guid><dc:creator><![CDATA[Jimmmm]]></dc:creator><pubDate>Wed, 02 Dec 2009 11:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 11:52:10 GMT]]></title><description><![CDATA[<p>bei dem ersten Teil der Antwort habe ich zwei Variablen, aber ich kann nur etwas mit einer anfangen. Ich möchte das Programm mit dieser Variablen weiterschreiben z. B. sa.lesen().<br />
Bei dem zweiten Teil tritt das Problem auf, dass ich auf Methoden und Membervariablen, die zwar in ObjektA, aber nicht im BasisObjekt oder ObjektB deklariert sind, nicht zugreifen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816393</guid><dc:creator><![CDATA[Conny2]]></dc:creator><pubDate>Wed, 02 Dec 2009 11:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 11:55:17 GMT]]></title><description><![CDATA[<p>Conny2 schrieb:</p>
<blockquote>
<p>Bei dem zweiten Teil tritt das Problem auf, dass ich auf Methoden und Membervariablen, die zwar in ObjektA, aber nicht im BasisObjekt oder ObjektB deklariert sind, nicht zugreifen kann.</p>
</blockquote>
<p>Das kannst du doch sowieso nicht, ohne den Typ abzufragen, denn du weißt ja nicht, welches Objekt erstellt wurde.</p>
<p>Erklär doch mal genauer, in welchem Zusammenhang ObjektA und ObjektB stehen, und was du danach damit machen willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816394</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 02 Dec 2009 11:55:17 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 12:12:00 GMT]]></title><description><![CDATA[<p>Scheint wohl eine Aufgabe zu sein, denn es erinnert mich stark an <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-255526.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-255526.html</a> (von gestern abend).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816404</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 02 Dec 2009 12:12:00 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 13:24:15 GMT]]></title><description><![CDATA[<p>Conny2 schrieb:</p>
<blockquote>
<p>bei dem ersten Teil der Antwort habe ich zwei Variablen, aber ich kann nur etwas mit einer anfangen. Ich möchte das Programm mit dieser Variablen weiterschreiben z. B. sa.lesen().<br />
Bei dem zweiten Teil tritt das Problem auf, dass ich auf Methoden und Membervariablen, die zwar in ObjektA, aber nicht im BasisObjekt oder ObjektB deklariert sind, nicht zugreifen kann.</p>
</blockquote>
<p>Ja, das kannst du nicht, weil deine zwei Klassen nicht die selbe Schnittstelle (Interface) haben. Haben diese beiden Klassen fachlich etwas gemeinsam? Z.B. müssen sie ja beide die Member-Funktion <code>lesen()</code> haben, richtig? Daraus folgt, sie müssen beide ein gemeinsames Interface haben. Das kannst du mit <em>reinen virtuellen Funktionen</em> erfüllen:</p>
<p><a href="http://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_OOP/_Abstrakte_Klassen" rel="nofollow">http://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_OOP/_Abstrakte_Klassen</a></p>
<p>Hast du kein vernünftiges C++-Einsteigerbuch? Schlag da mal nach &quot;Klassen Vererbung&quot; nach. Ansonst kann ich mich nur MFK anschlißen: was sind denn konkret ObjektA und ObjektB? Dann können wir dir genauer weiter helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816437</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 02 Dec 2009 13:24:15 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 13:25:39 GMT]]></title><description><![CDATA[<p>Ich habe zwei Maschinen (ObjektA,ObjektB), von denen ich Daten einlese. Die Formate und Einleseroutinen sind sehr verschieden. Es gibt aber auch ein BasisObjekt für gleiche Aufgaben.<br />
Die Daten werden einem Fit zur Auswertung übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816444</guid><dc:creator><![CDATA[Conny2]]></dc:creator><pubDate>Wed, 02 Dec 2009 13:25:39 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 13:33:53 GMT]]></title><description><![CDATA[<p>Conny2 schrieb:</p>
<blockquote>
<p>Ich habe zwei Maschinen (ObjektA,ObjektB), von denen ich Daten einlese. Die Formate und Einleseroutinen sind sehr verschieden. Es gibt aber auch ein BasisObjekt für gleiche Aufgaben.<br />
Die Daten werden einem Fit zur Auswertung übergeben.</p>
</blockquote>
<p>OK, also sind beides Maschinen. Eine Gemeinsamkeit! Und beide lesen Daten ein. Wieder eine Gemeinsamkeit. Aber die lesen-Funktion ist für jeden Maschinen-Typ anders. Das kannst du doch formulieren:</p>
<pre><code class="language-cpp">class Maschine
{
  public:
       virtual string lesen() = 0; // = 0 bedeutet &quot;keine Implementierung bekannt&quot;!
};
</code></pre>
<p>So, deine beiden Maschinen-Typen erben von Maschine. Und dort mußt du die <em>spezialisierte</em> lesen-Funktion implementieren:</p>
<pre><code class="language-cpp">class MaschinenTypA : public Maschine
{
  public:
       string lesen()
       {
              // hier die spezielle Funktion für Maschinen Typ A
       }
};

class MaschinenTypB : public Maschine
{
  public:
       string lesen()
       {
              // hier die spezielle Funktion für Maschinen Typ B
       }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1816452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816452</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 02 Dec 2009 13:33:53 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 13:45:18 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Maschine* m = 0;

if (flag)
{
   m = new MaschineTypA();
}
else
{
   m = new MaschineTypB();
}

m-&gt;lesen();  // wird autom. die richtige lesen()-Funktion aufgerufen.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1816454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816454</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 02 Dec 2009 13:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzenweiche c++ on Wed, 02 Dec 2009 13:46:31 GMT]]></title><description><![CDATA[<p>vielen Dank Euch allen für Eure Mühe. Ich werde den letzten Vorschlag ausprobieren.<br />
Viele Grüße<br />
Conny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816458</guid><dc:creator><![CDATA[Conny2]]></dc:creator><pubDate>Wed, 02 Dec 2009 13:46:31 GMT</pubDate></item></channel></rss>