<?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[Unterschiedliche Klassen - unterschiedlicher Zugriff]]></title><description><![CDATA[<p>Hallo,<br />
ich stehe hier gerade vor einem etwas komplexeren Problem.<br />
Ich schreibe derzeit ein kleines Poker-Programm und stehe jetzt vor dem Problem, eine KI integrieren zu wollen.</p>
<p>Es gibt bereits eine Klasse cPlayer:</p>
<pre><code class="language-cpp">#ifndef CPLAYER_H
#define CPLAYER_H
#include &lt;vector&gt;
#include &quot;ccard.h&quot;

class cPlayer
{
public:
    cPlayer();
    cPlayer(std::string, long, int, int);
    virtual ~cPlayer();

    // set
    void addCard(cCard);
    void setName(std::string);
    void setAggression(int);
    void setBluff(int);
    void setIsWinner(bool);
    void setIsOut(bool);
    void setIsInRound(bool);
    void modifyChips(long);
    void modifyWins(unsigned int);

    //get
    std::string getName();
    int getAggression();
    int getBluff();
    unsigned int getWins();
    long getChips();
    cCard getCard(int);
    std::vector&lt;cCard&gt; getCards();
    bool getIsWinner();
    bool getIsOut();
    bool getIsInRound();
    //del
    void delCards();
protected:
    bool bIsInRound;
    bool bIsOut;
    bool bIsWinner;
    std::string sName;
    long iChips;
    int iAggression;
    int iBluff;
    unsigned int iWins;
    std::vector&lt;cCard&gt; Cards;
private:
};

#endif // CPLAYER_H
</code></pre>
<p>In der Klasse cPoker habe ich einen Vektor von cPlayer. Nun möchte ich aber eine neue Klasse cBot erstellen.</p>
<p>Diese Klasse soll von der Klasse cPlayer vererbt werden. Allerdings soll sie nur Zugriff auf die getter haben, nicht auf die Setter. Die eigentlichen Variablen sollen weiterhin in der cPlayer bleiben und cPoker muss weiterhin auf cPlayer zugreifen können (wie bis jetzt).</p>
<p>Wie kann ich nun vermeiden, die ganze cPoker Klasse als friend der cPoker Klasse zu deklarieren und trotzdem diesen unterschiedlichen Zugriff hinbekommen?</p>
<p>Also der Bot soll nur seine Karten, seine Position am Tisch, Chipanzahl usw. lesen können und dann eine Action ausführen.<br />
In der Klasse cPoker muss natürlich die Position, Chipanzahl immer verändert werden .. wie stelle ich das an? Bin am Ende von meinem Latein. Muss ich komplett anders an die Sache herangehen?</p>
<p>Nun das zweite Problem, im Moment noch nicht wichtig. Wie kann ich dann realisieren, dass es verschiedene Bots gibt, die natürlich auch immer verschieden agieren? Muss ich da verschiedene Klassen erstellen?</p>
<p>Viele Grüße und vielen Dank schonmal<br />
CsT</p>
<p>EDIT:<br />
Habe gerade nochmal ein bisschen nachgedacht und nachgelesen ..<br />
Kann ich es irgendwie anstellen, dass für cBot die ganzen Variablen const sind, also die setter nicht aufgerufen werden können? Dann hätte ich ja auch das bewerkstelligt, was ich möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168704/unterschiedliche-klassen-unterschiedlicher-zugriff</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 15:35:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168704.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 26 Dec 2006 20:49:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unterschiedliche Klassen - unterschiedlicher Zugriff on Tue, 26 Dec 2006 21:38:02 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich stehe hier gerade vor einem etwas komplexeren Problem.<br />
Ich schreibe derzeit ein kleines Poker-Programm und stehe jetzt vor dem Problem, eine KI integrieren zu wollen.</p>
<p>Es gibt bereits eine Klasse cPlayer:</p>
<pre><code class="language-cpp">#ifndef CPLAYER_H
#define CPLAYER_H
#include &lt;vector&gt;
#include &quot;ccard.h&quot;

class cPlayer
{
public:
    cPlayer();
    cPlayer(std::string, long, int, int);
    virtual ~cPlayer();

    // set
    void addCard(cCard);
    void setName(std::string);
    void setAggression(int);
    void setBluff(int);
    void setIsWinner(bool);
    void setIsOut(bool);
    void setIsInRound(bool);
    void modifyChips(long);
    void modifyWins(unsigned int);

    //get
    std::string getName();
    int getAggression();
    int getBluff();
    unsigned int getWins();
    long getChips();
    cCard getCard(int);
    std::vector&lt;cCard&gt; getCards();
    bool getIsWinner();
    bool getIsOut();
    bool getIsInRound();
    //del
    void delCards();
protected:
    bool bIsInRound;
    bool bIsOut;
    bool bIsWinner;
    std::string sName;
    long iChips;
    int iAggression;
    int iBluff;
    unsigned int iWins;
    std::vector&lt;cCard&gt; Cards;
private:
};

#endif // CPLAYER_H
</code></pre>
<p>In der Klasse cPoker habe ich einen Vektor von cPlayer. Nun möchte ich aber eine neue Klasse cBot erstellen.</p>
<p>Diese Klasse soll von der Klasse cPlayer vererbt werden. Allerdings soll sie nur Zugriff auf die getter haben, nicht auf die Setter. Die eigentlichen Variablen sollen weiterhin in der cPlayer bleiben und cPoker muss weiterhin auf cPlayer zugreifen können (wie bis jetzt).</p>
<p>Wie kann ich nun vermeiden, die ganze cPoker Klasse als friend der cPoker Klasse zu deklarieren und trotzdem diesen unterschiedlichen Zugriff hinbekommen?</p>
<p>Also der Bot soll nur seine Karten, seine Position am Tisch, Chipanzahl usw. lesen können und dann eine Action ausführen.<br />
In der Klasse cPoker muss natürlich die Position, Chipanzahl immer verändert werden .. wie stelle ich das an? Bin am Ende von meinem Latein. Muss ich komplett anders an die Sache herangehen?</p>
<p>Nun das zweite Problem, im Moment noch nicht wichtig. Wie kann ich dann realisieren, dass es verschiedene Bots gibt, die natürlich auch immer verschieden agieren? Muss ich da verschiedene Klassen erstellen?</p>
<p>Viele Grüße und vielen Dank schonmal<br />
CsT</p>
<p>EDIT:<br />
Habe gerade nochmal ein bisschen nachgedacht und nachgelesen ..<br />
Kann ich es irgendwie anstellen, dass für cBot die ganzen Variablen const sind, also die setter nicht aufgerufen werden können? Dann hätte ich ja auch das bewerkstelligt, was ich möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198208</guid><dc:creator><![CDATA[CsT]]></dc:creator><pubDate>Tue, 26 Dec 2006 21:38:02 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Klassen - unterschiedlicher Zugriff on Wed, 27 Dec 2006 14:52:20 GMT]]></title><description><![CDATA[<p>So weit ich weiß, wenn du eine Funktion als private deklarierst, wird sie nicht vererbt. Zu deinem zweiten Problem: Du kannst im Programm zwei mal einen Player deklarieren.<br />
Also:</p>
<pre><code class="language-cpp">cPoker{
    public:  //was anderes geht natürlich auch
    cPlayer Player1;
    cPlayer Player2;
};
</code></pre>
<p>So kannst du dann Player1 und Player2 voneinander unabhänig nutzen ohne eine neue Klasse zu schreiben.</p>
<p>Ich hoffe, dass ich dir helfen konnte dein Problem zu lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198514</guid><dc:creator><![CDATA[GNUnix]]></dc:creator><pubDate>Wed, 27 Dec 2006 14:52:20 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Klassen - unterschiedlicher Zugriff on Wed, 27 Dec 2006 16:54:46 GMT]]></title><description><![CDATA[<p>Hi, vielen Dank für deine Antwort. Werde mal versuchen, die einzelnen Funktionen private zu deklarieren.<br />
Aber zu dem zweiten Problem: Mir ist schon klar, dass ich mehrere Player erstellen kann .. aber ich möchte ja jedem Bot dann später mal eine eigene, individuelle KI geben. Also muss jeder irgendwie eigene Funktionen haben und das würde ja dann nicht gehen, oder?</p>
<p>Viele Grüße und besten Dank nochmal<br />
CsT</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198596</guid><dc:creator><![CDATA[CsT]]></dc:creator><pubDate>Wed, 27 Dec 2006 16:54:46 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Klassen - unterschiedlicher Zugriff on Wed, 27 Dec 2006 17:17:47 GMT]]></title><description><![CDATA[<p>Du kannst ja statt der Playerklasse ebend zwei Botklassen definieren und wenn du in die Aktionen der Bots den Zufall oder Reaktionen auf bestimmte Ereignisse hineinbringst, machen beide, obwohl sie aus den gleichen Klassen bestehen, nicht das gleiche. Ich nämlich auch ein kleines bisschen Erfahrung mit der Spieleprogrammierung und da nimmt man auch nur eine Klasse und definiert Reaktionen auf bestimmte Ereignisse, denn du kannst ja nicht z. B. in einem Spiel wie Roller Coaster Tycoon für jeden Besucher eine neue Klasse definieren, die Besucher machen ja auch nicht immer dasselbe. Dann bräuchtest du ja hunderte von Klassen.</p>
<p>Ich hoffe, ich konnte dir klar machen, was ich sagen wollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198609</guid><dc:creator><![CDATA[GNUnix]]></dc:creator><pubDate>Wed, 27 Dec 2006 17:17:47 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Klassen - unterschiedlicher Zugriff on Wed, 27 Dec 2006 21:42:11 GMT]]></title><description><![CDATA[<p>Hi,<br />
ja habe dich verstanden. Allerdings möchte ich eventuell ein Interface für die Bots haben, damit man komplett unterschiedliche Bots programmieren kann. Aber das kann eh und je erst warten.</p>
<p>Wichtiger ist mein erstes Problem .. und ich stehe immer noch auf dem Schlauch. Der Bot darf halt selber nur read-only auf die ganzen Daten zugreifen, das Poker-Game hingegen auf alles. Aber möglichst ohne als friend deklariert zu sein, weil es ja dann auch auf die Variablen an sich zugreifen kann ..</p>
<p>Vielen Dank nochmal<br />
CsT</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198731</guid><dc:creator><![CDATA[CsT]]></dc:creator><pubDate>Wed, 27 Dec 2006 21:42:11 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Klassen - unterschiedlicher Zugriff on Thu, 28 Dec 2006 05:00:11 GMT]]></title><description><![CDATA[<p>Wenn DAS der Fall ist scheint mir (Achtung, Anfänger!) dein Design irgendwie nicht aufzugehen, denn dann ist der Bot ja irgendwie kein Spieler, weil ihm eben diese Fähigkeiten verloren gehen... was bei Vererbung eigentlich nicht sein soll.</p>
<p>Vielleicht solltest du eine gemeinsame Basisklasse &quot;Player&quot; machen, die die set Methoden nicht hat (und alle anderen Methoden pure virtual), und dann Bot und HumanPlayer von dieser erben lassen, wobei du HumanPlayer dann die get Methoden gibst. Würde mir jetzt mal am logischsten erscheinen, weil: ein Bot ist ein Spieler, aber kein menschlicher Spieler. Ergo sollte er auch nicht von einem menschlichen Spieler erben. Und umgekehrt genauso, ein menschlicher Spieler ist ein Spieler, aber kein Bot.</p>
<p>Wie gesagt, ich bin selbst noch Anfänger, also keine Garantie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198844</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Thu, 28 Dec 2006 05:00:11 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Klassen - unterschiedlicher Zugriff on Tue, 02 Jan 2007 10:19:51 GMT]]></title><description><![CDATA[<p>GNUnix schrieb:</p>
<blockquote>
<p>So weit ich weiß, wenn du eine Funktion als private deklarierst, wird sie nicht vererbt.</p>
</blockquote>
<p>Alle Methoden werden vererbt - aber private Methoden kann die Kind-Klasse nicht direkt aufrufen.</p>
<p>Zu deinem Ansatz: Wieso sollte der menschliche Spieler mehr Möglichkeiten haben als ein Bot-Spieler? (die ganzen Methoden, die du vor dem Bot verstecken willst, haben in der Spieler-Klasse überhaupt nichts zu suchen, sondern gehören sollten eher in die Spiel-Klasse gehören)</p>
<pre><code class="language-cpp">class cPoker
{
  vector&lt;cSpieler*&gt; teilnehmer;
  int sieger;
  ...
public:
  void eintreten(cSpieler* neu) {teilnehmer.push_back(neu);}
  void austreten(cSpieler* alt)
  {
    vector&lt;cSpieler*&gt;::iterator pos=find(teilnehmer.begin(),teilnehmer.end(),alt);
    if(pos!=teilnehmer.end()) teilnehmer.erase(pos);
  }
  ...
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1201002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1201002</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 02 Jan 2007 10:19:51 GMT</pubDate></item></channel></rss>