<?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[Interface &amp;lt;-&amp;gt; Klasse - Rückgabe?]]></title><description><![CDATA[<p>Hallo.<br />
Ist folgendes (laut Standard) erlaubt?</p>
<pre><code class="language-cpp">class IBasePlayer
{
public:
    virtual std::string GetName() const = 0;
};

class IGamePlayer : public IBasePlayer
{
public:
    virtual int GetKills() const = 0;
};

class CGamePlayer : public IGamePlayer, public IBasePlayer
{
public:
    virtual std::string GetName() const
    {
        return this-&gt;m_strName;
    }

    virtual int GetKills() const
    {
        return this-&gt;m_iKills;
    }

private:
    std::string m_strName;
    int m_iKills;
};

class IPlayerManager
{
public:
    virtual IBasePlayer *GetPlayer(std::string strName) const = 0;
};

class CPlayerManager : public IPlayerManager
{
public:
    virtual IBasePlayer *GetPlayer(std::string strName) const
    {
        CGamePlayer *pPlayer = new CGamePlayer(strName);
        return static_cast&lt;IBasePlayer*&gt;(pPlayer);
    }
};

// ist dies valid? und sind dann auch gefahrlos alle Funktionen von CGamePlayer aufrufbar?
CGamePlayer *pPlayer = static_cast&lt;CGamePlayer*&gt;(PlayerManager-&gt;GetPlayer(&quot;Heinz&quot;));
std::string strName = pPlayer-&gt;GetName(); // von IBasePlayer
int iKills = pPlayer-&gt;GetKills(); // von IGamePlayer
</code></pre>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266613/interface-lt-gt-klasse-rückgabe</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 04:16:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266613.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 11 May 2010 14:44:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Interface &amp;lt;-&amp;gt; Klasse - Rückgabe? on Tue, 11 May 2010 14:46:43 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ist folgendes (laut Standard) erlaubt?</p>
<pre><code class="language-cpp">class IBasePlayer
{
public:
    virtual std::string GetName() const = 0;
};

class IGamePlayer : public IBasePlayer
{
public:
    virtual int GetKills() const = 0;
};

class CGamePlayer : public IGamePlayer, public IBasePlayer
{
public:
    virtual std::string GetName() const
    {
        return this-&gt;m_strName;
    }

    virtual int GetKills() const
    {
        return this-&gt;m_iKills;
    }

private:
    std::string m_strName;
    int m_iKills;
};

class IPlayerManager
{
public:
    virtual IBasePlayer *GetPlayer(std::string strName) const = 0;
};

class CPlayerManager : public IPlayerManager
{
public:
    virtual IBasePlayer *GetPlayer(std::string strName) const
    {
        CGamePlayer *pPlayer = new CGamePlayer(strName);
        return static_cast&lt;IBasePlayer*&gt;(pPlayer);
    }
};

// ist dies valid? und sind dann auch gefahrlos alle Funktionen von CGamePlayer aufrufbar?
CGamePlayer *pPlayer = static_cast&lt;CGamePlayer*&gt;(PlayerManager-&gt;GetPlayer(&quot;Heinz&quot;));
std::string strName = pPlayer-&gt;GetName(); // von IBasePlayer
int iKills = pPlayer-&gt;GetKills(); // von IGamePlayer
</code></pre>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895798</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Tue, 11 May 2010 14:46:43 GMT</pubDate></item><item><title><![CDATA[Reply to Interface &amp;lt;-&amp;gt; Klasse - Rückgabe? on Tue, 11 May 2010 15:05:38 GMT]]></title><description><![CDATA[<p>1. Upcasts erfolgen implizit und benötigen kein <code>static_cast</code> (Zeile 43).<br />
2. Downcasts mittels <code>static_cast</code> und der darauffolgende Zugriff sind definiert, wenn der dynamische Typ mit dem Zieltypen des Casts übereinstimmt.</p>
<p>Anders gesagt: Dein Beispiel ist erlaubt. Ob du den Downcast wirklich brauchst und sich das nicht schöner lösen lässt, ist eine andere Frage. Zum Beispiel könntest du kovariante Rückgabetypen ausnutzen, um in <code>CPlayerManager</code> einen <code>CGamePlayer*</code> zurückzugeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895811</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 11 May 2010 15:05:38 GMT</pubDate></item></channel></rss>