<?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[Funktion mit unbekanntem Rückgabetyp]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem:</p>
<p>Ich möchte eine Funktion <strong>choose_oppenent(...){}</strong> schreiben, die drei verschiedene Klasseninstanzen per Parameter annimmt und über einen integrierten Zufallsgenerator einen Gegner für den Spieler bestimmt.</p>
<p>Zuerst habe ich da an sowas gedacht, allerdings funktioniert das nicht:</p>
<pre><code class="language-cpp">template &lt;class X&gt;
 X choose_oppenent( CKrieger a, CBogenschütze b, CMagier c ){
	return b; // Bogenschütze soll zurückgegeben werden
}
</code></pre>
<p>Dann habe ich mir folgendes überlegt:</p>
<pre><code class="language-cpp">template &lt;class X, class Y, class Z&gt;
 X choose_oppenent( X a, Y b, Z c ){
	return c; // das klappt
}
</code></pre>
<p>Das funktioniert und kann so auch ausgegeben werden:</p>
<pre><code class="language-cpp">cout &lt;&lt; random(a,b,c);
</code></pre>
<p>Allerdings wäre mir obige Variante lieber, da ich eh nur drei verschiedene Klassen habe. Wie aber erstelle ich eine Funktion mit unbekanntem Rückgabetyp, geht das? Gibt es vielleicht eine bessere Möglichkeit?</p>
<p>Gruß,</p>
<p>Kay</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264187/funktion-mit-unbekanntem-rückgabetyp</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 03:00:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264187.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Apr 2010 19:31:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sat, 03 Apr 2010 19:33:05 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem:</p>
<p>Ich möchte eine Funktion <strong>choose_oppenent(...){}</strong> schreiben, die drei verschiedene Klasseninstanzen per Parameter annimmt und über einen integrierten Zufallsgenerator einen Gegner für den Spieler bestimmt.</p>
<p>Zuerst habe ich da an sowas gedacht, allerdings funktioniert das nicht:</p>
<pre><code class="language-cpp">template &lt;class X&gt;
 X choose_oppenent( CKrieger a, CBogenschütze b, CMagier c ){
	return b; // Bogenschütze soll zurückgegeben werden
}
</code></pre>
<p>Dann habe ich mir folgendes überlegt:</p>
<pre><code class="language-cpp">template &lt;class X, class Y, class Z&gt;
 X choose_oppenent( X a, Y b, Z c ){
	return c; // das klappt
}
</code></pre>
<p>Das funktioniert und kann so auch ausgegeben werden:</p>
<pre><code class="language-cpp">cout &lt;&lt; random(a,b,c);
</code></pre>
<p>Allerdings wäre mir obige Variante lieber, da ich eh nur drei verschiedene Klassen habe. Wie aber erstelle ich eine Funktion mit unbekanntem Rückgabetyp, geht das? Gibt es vielleicht eine bessere Möglichkeit?</p>
<p>Gruß,</p>
<p>Kay</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877264</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sat, 03 Apr 2010 19:33:05 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sat, 03 Apr 2010 19:37:51 GMT]]></title><description><![CDATA[<p>Sowas gibt es nicht. Erben diese drei Klassen denn nicht von einer gemeinsamen Klasse? Würde zumindest Sinn machen. Und in dem Fall kannst du einfach per Upcast eine entsprechende Klasse zurückgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877266</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Sat, 03 Apr 2010 19:37:51 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sat, 03 Apr 2010 19:42:47 GMT]]></title><description><![CDATA[<p>Alle Klassen erben von einer Klasse CEinheit, aber wie genau meinst du jetzt soll ich das machen? Kannst du mir das vielleicht an einem Beispiel zeigen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877269</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sat, 03 Apr 2010 19:42:47 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sat, 03 Apr 2010 19:45:23 GMT]]></title><description><![CDATA[<pre><code>CEinheit* randomClass(CKrieger *a, CBogenschütze *b, CMagier *c)
{
  // Random bla bla bla
  return b; // Impliziter Upcast von CBogenschütze* nach CEinheit*
}
</code></pre>
<p>Dann musst du im nachhinein halt mit CEinheit weiter arbeiten, was kein Problem sein sollte, sofern du deinen Code sauber strukturierst.</p>
<p>Übrigens ist die ungarische Notation out. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1877270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877270</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Sat, 03 Apr 2010 19:45:23 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sat, 03 Apr 2010 19:51:01 GMT]]></title><description><![CDATA[<p>Hm, aber irgendwie ist das doch blöd wenn ich extra Unterklassen mache und die dann direkt wieder zu einer Basisklasse werden. Ich möchte im Prinzip ja nur den Gegner auslosen und mit dessen Eigenschaften dann gegen den Spieler kämpfen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Der Gegner soll ja nicht plötzlich alle Attacken der Klasse CEinheit haben, sondern nur die, die für ihn bestimmt sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877271</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sat, 03 Apr 2010 19:51:01 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sat, 03 Apr 2010 19:56:38 GMT]]></title><description><![CDATA[<p>Schlechte Implementierung deinerseits. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
CEinheit sollte virtuelle Funktionen vorgeben, über die alle Einheiten gleich zu &quot;bedienen&quot; sind. Die Implementierungen deiner konkreten Klassen können gerne abweichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877273</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Sat, 03 Apr 2010 19:56:38 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sat, 03 Apr 2010 20:10:57 GMT]]></title><description><![CDATA[<p>Ich glaub ich hab jetzt verstanden was du meinst. In etwa so?</p>
<pre><code class="language-cpp">// C++ für Spieleprogrammierer
// Listing 7.14
// Virtuelle Funktionen
//
#include &lt;iostream&gt;

using namespace std;

// Klassen
//

// Basisklasse
//
class CRaumschiff
{
	protected:

		// Membervariablen
		int m_Farbe;
		int m_Energie;

	public:

		// Memberfunktionen
		CRaumschiff ()
		{
			m_Farbe = 0;
			m_Energie = 1000;
			cout &lt;&lt; &quot;Neues Raumschiff erstellt&quot; &lt;&lt; endl;
		}

		virtual ~CRaumschiff () {cout &lt;&lt; &quot;Destruktor Basisklasse\n&quot;;}

		virtual void Starten () {cout &lt;&lt; &quot;Raumschiff startet!\n&quot;;}
		virtual void Landen  () {cout &lt;&lt; &quot;Raumschiff landet!\n&quot;;}

};

// Abgeleitete Klasse für den Minenleger
//
class CMinenleger : public CRaumschiff
{
	private:

		// Membervariablen
		int m_Minen;

	public:

		// Memberfunktionen
		CMinenleger ()
		{
			m_Minen = 10;
			cout &lt;&lt; &quot;Neuer Minenleger erstellt&quot; &lt;&lt; endl;
		};

		~CMinenleger () {cout &lt;&lt; &quot;Destruktor Minenleger\n&quot;;}

		void Starten () {cout &lt;&lt; &quot;Minenleger startet!\n&quot;;}
		void Landen  () {cout &lt;&lt; &quot;Minenleger landet!\n&quot;;}

};

// Hauptprogramm
//
int main ()
{
	// Variablen
	//
	CRaumschiff *Schiff; // Ein Raumschiff

	Schiff = new CMinenleger; // Ein Minenleger soll es sein

	// Minenleger führt einige Aktionen aus
	Schiff-&gt;Starten ();
	Schiff-&gt;Landen ();

	delete Schiff;  // Raumschiff zerstören

	return 0;
}
</code></pre>
<p>...und das ist der wichtige Teil den du meintest, oder?<br />
<strong>Schiff = new CMinenleger;</strong></p>
<p>...und wenn mein Bogenschütze jetzt als CEinheit rückgegeben wird, ist er immernoch ein Bogenschütze, oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877287</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sat, 03 Apr 2010 20:10:57 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sat, 03 Apr 2010 20:14:11 GMT]]></title><description><![CDATA[<p><em>Kay</em> schrieb:</p>
<blockquote>
<p>...und das ist der wichtige Teil den du meintest, oder?<br />
<strong>Schiff = new CMinenleger;</strong></p>
<p>...und wenn mein Bogenschütze jetzt als CEinheit rückgegeben wird, ist er immernoch ein Bogenschütze, oder nicht?</p>
</blockquote>
<p>Ganz genau. Du kannst eben nicht mehr auf die Details vom Bogenschützen zugreifen, aber das sollte auch nicht nötig sein. Die als virtual markierten Funktionen die in Bogenschützen überschrieben wurden, werden auch nachwievor vom Bogenschützen und nicht von CEinheit aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877288</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Sat, 03 Apr 2010 20:14:11 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sat, 03 Apr 2010 20:31:07 GMT]]></title><description><![CDATA[<p>Hier nochmal der code, ein bisschen angepasst an mein Beispiel:</p>
<p>ich erhalte folgende Fehlermeldung:</p>
<blockquote>
<p>error C2664: 'randomClass': Konvertierung des Parameters 1 von 'CEinheit *' in 'CRitter *' nicht möglich</p>
</blockquote>
<p>Siehst du vielleicht woran das liegt?</p>
<pre><code class="language-cpp">// C++ für Spieleprogrammierer
// Listing 7.14
// Virtuelle Funktionen
//
#include &lt;iostream&gt;

using namespace std;

class CEinheit
{
	protected:

		int m_Farbe;
		int m_Energie;

	public:

		CEinheit ()
		{
			m_Farbe = 0;
			m_Energie = 1000;
			cout &lt;&lt; &quot;Neues Raumschiff erstellt&quot; &lt;&lt; endl;
		}

		virtual ~CEinheit () {cout &lt;&lt; &quot;Destruktor Basisklasse\n&quot;;}

		virtual void Starten () {cout &lt;&lt; &quot;Raumschiff startet!\n&quot;;}
		virtual void Landen  () {cout &lt;&lt; &quot;Raumschiff landet!\n&quot;;}

};

class CBogenschütze : public CEinheit
{
	private:

		int m_Minen;

	public:

		CBogenschütze ()
		{
			m_Minen = 10;
			cout &lt;&lt; &quot;Neuer Bogenschütze erstellt&quot; &lt;&lt; endl;
		};

		~CBogenschütze () {cout &lt;&lt; &quot;Destruktor Bogenschützer\n&quot;;}

		void Starten () {cout &lt;&lt; &quot;Bogenschütze startet!\n&quot;;}
		void Landen  () {cout &lt;&lt; &quot;Bogenschütze landet!\n&quot;;}

};

class CRitter : public CEinheit
{
	private:
		int m_Minen;

	public:

		CRitter ()
		{
			m_Minen = 10;
			cout &lt;&lt; &quot;Neuer Ritter erstellt&quot; &lt;&lt; endl;
		};

		~CRitter () {cout &lt;&lt; &quot;Destruktor Minenleger\n&quot;;}

		void Starten () {cout &lt;&lt; &quot;Ritter startet!\n&quot;;}
		void Landen  () {cout &lt;&lt; &quot;Ritter landet!\n&quot;;}

};

CEinheit* randomClass(CRitter *a, CBogenschütze *b)
{

  return a; // Impliziter Upcast von CBogenschütze* nach CEinheit*
}

int main ()
{

	CEinheit *Gegner1;
	CEinheit *Gegner2;

	Gegner1 = new CRitter; 
	Gegner2 = new CBogenschütze;

	randomClass(Gegner1, Gegner2); 

	system(&quot;pause&quot;);
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1877300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877300</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sat, 03 Apr 2010 20:31:07 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sat, 03 Apr 2010 20:34:30 GMT]]></title><description><![CDATA[<p>randomClass als Parameter auch nur CEinheit* nehmen lassen.<br />
Denn auch wenn du virtuelle Funktionen hast, heißt das noch nicht dass du einfach ein CEinheit* übergeben kannst, wo ein CRitter* erwartet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877302</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Sat, 03 Apr 2010 20:34:30 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sat, 03 Apr 2010 20:38:46 GMT]]></title><description><![CDATA[<p>Ah es funktioniert, danke euch. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877304</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sat, 03 Apr 2010 20:38:46 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sun, 04 Apr 2010 12:50:36 GMT]]></title><description><![CDATA[<p>Ich habe wieder ein kleines Problem... und zwar möchte ich, dass der Spieler zwischen drei verschiedenen Klassen wählen kann.</p>
<p><strong>Basisklasse:</strong><br />
CEinheit</p>
<p><strong>abgeleitete Klassen:</strong><br />
CKrieger<br />
CMagier<br />
CBogenschütze</p>
<p>Wie kriege ich es jetzt hin, dass ich einen Spieler habe, der zur Laufzeit seine Klasse aussucht und mit dieser dann das ganze Spiel über spielen kann? Ich hab an eine Klasse <strong>CSpieler</strong> gedacht, die über eine Funktion <strong>GetClass</strong> oder so ihre Klasse annimmt, allerdings weiß ich nicht was ich für einen Parameter nehmen soll. Wie würdet ihr das lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877458</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sun, 04 Apr 2010 12:50:36 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sun, 04 Apr 2010 13:06:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Klasse
{
};

class Ritter : public Klasse
{
};

int main ()
{
    Klasse* k = new Ritter;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1877462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877462</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Sun, 04 Apr 2010 13:06:17 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sun, 04 Apr 2010 13:16:55 GMT]]></title><description><![CDATA[<p>Dann habe ich aber ja das Problem, dass <strong>k</strong> keine speziellen Funktionen von Ritter aufrufen kann, sondern nur die von Klasse. Der Ritter soll ja Memberfunktionen haben, also Attacken, die ihn von den anderen unterscheiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877463</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sun, 04 Apr 2010 13:16:55 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sun, 04 Apr 2010 13:29:19 GMT]]></title><description><![CDATA[<p><em>Kay</em> schrieb:</p>
<blockquote>
<p>Dann habe ich aber ja das Problem, dass <strong>k</strong> keine speziellen Funktionen von Ritter aufrufen kann, sondern nur die von Klasse. Der Ritter soll ja Memberfunktionen haben, also Attacken, die ihn von den anderen unterscheiden.</p>
</blockquote>
<p>Das ist ein Designfehler von dir. Überleg wie man es besser machen könnte, mit virtuellen Funktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877466</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Sun, 04 Apr 2010 13:29:19 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sun, 04 Apr 2010 13:51:17 GMT]]></title><description><![CDATA[<p>So... Hab jetzt mal pure virtuelle Funktionen eingebaut. Jetzt werden die richtigen Funktionen aufgerufen, <strong>aber</strong> ich habe immernoch keinen Zugriff auf die Member von CRitter zum Beispiel. Wie soll ich das da machen?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class CEinheit // pure virtuelle Basisklasse
{
	protected:
		int m_Lebenspunkte; // hat jeder Charakter

	public:

		CEinheit ()
		{
			m_Lebenspunkte = 0;

		}

		virtual ~CEinheit () {cout &lt;&lt; &quot;Destruktor Basisklasse\n&quot;;}

		virtual void Angriff1  () = 0;
		virtual void Angriff2  () = 0;
		virtual void Angriff3  () = 0;

};

class CBogenschütze : public CEinheit
{
	private:
		int m_Power; // Haben nur Bogenschützen

	public:
		CBogenschütze ()
		{
			m_Power = 60;

		};

		~CBogenschütze () {cout &lt;&lt; &quot;Destruktor Bogenschützer\n&quot;;}

		void Angriff1  () {cout &lt;&lt; &quot;Zing!\n&quot;;}
		void Angriff2  () {cout &lt;&lt; &quot;Zang!\n&quot;;}
		void Angriff3  () {cout &lt;&lt; &quot;Zong!\n&quot;;}

};

class CRitter : public CEinheit
{
	private:
		int m_Kraft; // Haben nur Ritter

	public:
		CRitter ()
		{
			m_Kraft = 40;
			cout &lt;&lt; &quot;Neuer Ritter erstellt&quot; &lt;&lt; endl;
		};

		~CRitter () {cout &lt;&lt; &quot;Destruktor Ritter\n&quot;;}

		void Angriff1  () {cout &lt;&lt; &quot;Boom!\n&quot;;}
		void Angriff2  () {cout &lt;&lt; &quot;Bamm!\n&quot;;}
		void Angriff3  () {cout &lt;&lt; &quot;Bang!\n&quot;;}

};

int main ()
{
	CRitter *pRitter = NULL;
	pRitter = new CRitter;
	pRitter-&gt;Angriff1(); // funzt super

	CBogenschütze *pBogenschütze = NULL;
	pBogenschütze = new CBogenschütze;
	pBogenschütze-&gt;Angriff2(); // funzt super

	CEinheit *pSpieler = NULL;
	pSpieler = new CRitter; // Spieler soll ein Ritter sein
	pSpieler-&gt;Angriff1(); // funzt, ruft Attacke von Ritter auf

	system(&quot;pause&quot;);
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1877475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877475</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sun, 04 Apr 2010 13:51:17 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sun, 04 Apr 2010 14:01:18 GMT]]></title><description><![CDATA[<p>Wunderbar! Einfach soweit abstrahieren dass bei der Verwendung einer Einheit-Instanz nicht mehr von Belang ist, was das jetzt konkret ist.<br />
Anstelle von Angriff1, Angriff2, use kannst du dir überlegen, der Einheit noch eine Methode &quot;int anzahlAngriffe()&quot; zu geben, und die Angriff-Methode nach &quot;void Angriff( int nummer )&quot; umzubenennen.</p>
<p>Du könntest aber auch mal ganz konkret beschreiben, warum du jetzt unbedingt Zugriff auf einen Ritter brauchst. Das würde wahrscheinlich mehr helfen das Problem zu lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877481</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Sun, 04 Apr 2010 14:01:18 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sun, 04 Apr 2010 14:11:22 GMT]]></title><description><![CDATA[<p>Also:</p>
<p>Ich möchte ein Spiel schreiben, bei dem der Spieler gegen einen Computer Gegner kämpft. Wenn er den Ritter wählt, hat er ja andere Attacken als ein Magier zum Beispiel, deswegen ist es so wichtig, dass er ein Ritter bleibt, aber das geht ja jetzt so mit den puren virtuellen Funktionen anscheinend.</p>
<p>Das Problem ist nur die Membervariablen, wie kann ich es anstellen, dass der Ritter auf seine Membervariable m_Kraft zugreifen kann, sprich <strong>pSpieler-&gt;m_Kraft</strong> (davon abgesehen dass es so eh nicht geht weil es private ist).</p>
<p>Diese Membervariablen sind deswegen wichtig, weil ein Bogenschütze <strong>Power</strong> und nicht <strong>Kraft</strong> hat, sonst würde ich die ja einfach in die Basisklasse packen. Oder würde man einfach hingehen und anstatt Mana, Power, Kraft, einfach eine Variable namens <strong>Ressource</strong> machen? Die kann ich ja dann in die Basisklasse packen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877485</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sun, 04 Apr 2010 14:11:22 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sun, 04 Apr 2010 14:20:43 GMT]]></title><description><![CDATA[<p>Ich verstehe den Unterschied zwischen Power und Kraft nicht <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="😃"
    /><br />
<a href="http://www.dict.cc/englisch-deutsch/power.html" rel="nofollow">http://www.dict.cc/englisch-deutsch/power.html</a><br />
Ich würde wohl ein universelles Wort nehmen, denn sogesehen hat am Ende jede Klasse irgendwie eine &quot;Energie&quot;.<br />
Außerdem finde ich Attacken in die Klassen Klasse zu schreiben für wenig sinnvoll, dafür ist eine Spell oder Skill Klasse gedacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877488</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Sun, 04 Apr 2010 14:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sun, 04 Apr 2010 14:22:34 GMT]]></title><description><![CDATA[<p><em>Kay</em> schrieb:</p>
<blockquote>
<p>Diese Membervariablen sind deswegen wichtig, weil ein Bogenschütze <strong>Power</strong> und nicht <strong>Kraft</strong> hat, sonst würde ich die ja einfach in die Basisklasse packen. Oder würde man einfach hingehen und anstatt Mana, Power, Kraft, einfach eine Variable namens <strong>Ressource</strong> machen? Die kann ich ja dann in die Basisklasse packen.</p>
</blockquote>
<p>Es sollte egal sein, was du vor dir hast! Es sollte dich nicht interessieren, ob das jetzt ein Bogenschütze mit &quot;Power&quot; oder ein Ritter mit &quot;Kraft&quot; ist.<br />
Deine virtuellen Funktionen kümmern sich darum, was im Hintergrund passiert.<br />
Du hast die Funktion &quot;Einheit::attack(Einheit* opponent)&quot;, z.B.<br />
Oder von mir aus kapsele die einzelnen Arten von Attacken noch mal in eigenen Klassen.<br />
Es liegt jetzt an dir zu entscheiden, was ein Angriff dann bewirkt. Ein Schlag mit dem Schert auf den Kopf des Gegners könnte nun einen bestimmten Schaden zufügen. Oder gleich den Kopf abtrennen, wenn du keine adäquate Verteidung oder Rüstung aufweisen kannst. Das Ganze ist natürlich ETWAS komplexer als ein simples cout.</p>
<p>Also löse dich von der Vorstellung, auf ein Objekt speziell reagieren zu wollen, sondern gib deiner CEinheit ein Interface, das im Allgemeinen Sinne die einzelnen Interaktionen zulässt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877489</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Sun, 04 Apr 2010 14:22:34 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit unbekanntem Rückgabetyp on Sun, 04 Apr 2010 14:46:26 GMT]]></title><description><![CDATA[<p>Ok, ich programmier mal ein bisschen weiter und poste dann nochmal das Ergebnis, danke euch. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877501</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sun, 04 Apr 2010 14:46:26 GMT</pubDate></item></channel></rss>