<?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[in Klassen auf eine Reihe von Objekten zugreifen (Schiffe versenken)]]></title><description><![CDATA[<p>Hi,</p>
<p>ich programmiere Schiffe-Versenken in C++ (später grafisch mit OpenGl).<br />
Leider bin ich in der Objektorientierung neu und weiß nicht weiter.</p>
<p>Wie kann ich in der Klasse Shot überprüfen ob eines der erzeugten Schiffe der Klasse Ship getroffen wurde?</p>
<p>Ich hatte die Idee die Schiffe als Objekt-Stack an Shot zu übergeben aber er sagt man kann kein unbegrenztes Array übergeben.</p>
<p>Ich muss ja irgendwie SCHON auf die ganzen erzeugten Objekte zugreifen?</p>
<p>shot.c</p>
<pre><code class="language-cpp">#include &quot;shot.h&quot;
    #include &quot;ship.h&quot;

    Shot::Shot(){

    }

    // Wurde ein Schiff getroffen?
    // gehe alle Schiffe durch und überprüfe ob getroffen
    // Parameter Ship stack[] geht so nicht ?!?!?!
    void Shot::calcIsShipHit(int x, int y, Ship allShips[]){
    }
</code></pre>
<p>ship.h</p>
<pre><code class="language-cpp">#ifndef SHIP_H
    #define SHIP_H

    class Ship {

    private:
    // POSITION BEGINNT AN DER LINKEN OBEREN ECKE
    int positionX;
    int positionY;

    int canonPower;

    bool isEnemy;
    // 0 = Schiff liegt horizontal
    // 1 = Schiff liegt vertikal
    bool parking;

    // An welcher Stelle wurde das Schiff getroffen ?
    bool whereHit[];

    public:
    // Konstruktor
    Ship(int length);
    void draw();
    void destroy();
    void shoot(int x, int y);

    void setPositionX(int x);
    int getPositionX();

    void setPositionY(int y);
    int getPositionY();

    void setIsEnemy(bool side);
    bool getIsEnemy();

    void setParking (bool parking);
    bool getParking();

    void setWhereHit (int position);
    bool getWhereHit (int position);
    };
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/296396/in-klassen-auf-eine-reihe-von-objekten-zugreifen-schiffe-versenken</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 22:43:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296396.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Dec 2011 01:35:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to in Klassen auf eine Reihe von Objekten zugreifen (Schiffe versenken) on Sun, 04 Dec 2011 01:35:38 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich programmiere Schiffe-Versenken in C++ (später grafisch mit OpenGl).<br />
Leider bin ich in der Objektorientierung neu und weiß nicht weiter.</p>
<p>Wie kann ich in der Klasse Shot überprüfen ob eines der erzeugten Schiffe der Klasse Ship getroffen wurde?</p>
<p>Ich hatte die Idee die Schiffe als Objekt-Stack an Shot zu übergeben aber er sagt man kann kein unbegrenztes Array übergeben.</p>
<p>Ich muss ja irgendwie SCHON auf die ganzen erzeugten Objekte zugreifen?</p>
<p>shot.c</p>
<pre><code class="language-cpp">#include &quot;shot.h&quot;
    #include &quot;ship.h&quot;

    Shot::Shot(){

    }

    // Wurde ein Schiff getroffen?
    // gehe alle Schiffe durch und überprüfe ob getroffen
    // Parameter Ship stack[] geht so nicht ?!?!?!
    void Shot::calcIsShipHit(int x, int y, Ship allShips[]){
    }
</code></pre>
<p>ship.h</p>
<pre><code class="language-cpp">#ifndef SHIP_H
    #define SHIP_H

    class Ship {

    private:
    // POSITION BEGINNT AN DER LINKEN OBEREN ECKE
    int positionX;
    int positionY;

    int canonPower;

    bool isEnemy;
    // 0 = Schiff liegt horizontal
    // 1 = Schiff liegt vertikal
    bool parking;

    // An welcher Stelle wurde das Schiff getroffen ?
    bool whereHit[];

    public:
    // Konstruktor
    Ship(int length);
    void draw();
    void destroy();
    void shoot(int x, int y);

    void setPositionX(int x);
    int getPositionX();

    void setPositionY(int y);
    int getPositionY();

    void setIsEnemy(bool side);
    bool getIsEnemy();

    void setParking (bool parking);
    bool getParking();

    void setWhereHit (int position);
    bool getWhereHit (int position);
    };
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2152617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152617</guid><dc:creator><![CDATA[Furtano]]></dc:creator><pubDate>Sun, 04 Dec 2011 01:35:38 GMT</pubDate></item><item><title><![CDATA[Reply to in Klassen auf eine Reihe von Objekten zugreifen (Schiffe versenken) on Sun, 04 Dec 2011 06:27:51 GMT]]></title><description><![CDATA[<p>Hab ich schon in deinem letzten Thread gesagt, dass die Schiffe Observer auf Spielfelder sein können, damit man nicht alle durchgehen muss.<br />
<a href="http://www.c-plusplus.net/forum/p2152234#2152234" rel="nofollow">http://www.c-plusplus.net/forum/p2152234#2152234</a></p>
<p><a href="http://de.wikipedia.org/wiki/Observer_%28Entwurfsmuster%29" rel="nofollow">http://de.wikipedia.org/wiki/Observer_(Entwurfsmuster)</a></p>
<blockquote>
<p>// 0 = Schiff liegt horizontal<br />
// 1 = Schiff liegt vertikal<br />
bool parking;</p>
</blockquote>
<p>Nein, dafür gibt es Enums. Und nenn es bitte orientation und nicht parking.</p>
<p>Außerdem hast du viel zu viele Setter oder können sich deine Schiffe noch bewegen, wenn sie platziert wurden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2152637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152637</guid><dc:creator><![CDATA[Branchenexperte]]></dc:creator><pubDate>Sun, 04 Dec 2011 06:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to in Klassen auf eine Reihe von Objekten zugreifen (Schiffe versenken) on Sun, 04 Dec 2011 07:37:16 GMT]]></title><description><![CDATA[<p>Furtano schrieb:</p>
<blockquote>
<p>Ich hatte die Idee die Schiffe als Objekt-Stack an Shot zu übergeben aber er sagt man kann kein unbegrenztes Array übergeben.</p>
</blockquote>
<p>Die Idee ist nichts. Du machst OOP, da versucht man so viel wie möglich wegzukapseln. Du gibst hier das Innerste deines Spiels weiter: Das Array mit den Schiffen, das deren Positionen, Größen, Orientierung hält! Desweiteren würde ich für Shot keine eigene Klasse aufmachen. &quot;Schießen&quot; ist eine einmalige Aktion, die dem Spielfeld die Kordinaten liefert (wohin wird geschossen) und als return ein &quot;Wasser/getroffen/versenkt&quot; (o.Ä.) zurück liefert. MMn. ist es etwas übertrieben, für diese eine Funktion eine eigene Klasse zu basteln.</p>
<p>Und Arrays übergibt man nicht als Arrays sondern als Pointer (mit Größenangabe) - oder man verwendet besser gleich keine rohen Array, sondern gekapselte (entweder in std::array, wenn sich deine Spielfeldgröße nie ändert, oder eben std::vector).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2152640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152640</guid><dc:creator><![CDATA[sunken drunk]]></dc:creator><pubDate>Sun, 04 Dec 2011 07:37:16 GMT</pubDate></item><item><title><![CDATA[Reply to in Klassen auf eine Reihe von Objekten zugreifen (Schiffe versenken) on Sun, 04 Dec 2011 15:07:16 GMT]]></title><description><![CDATA[<p>Wie kann ich es stattdessen machen ?<br />
Observer Pattern ist mir jetzt zu kompliziert, vielleicht später ich möchte relativ einfache objektorientierte Programmierung machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2152812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152812</guid><dc:creator><![CDATA[Furtano]]></dc:creator><pubDate>Sun, 04 Dec 2011 15:07:16 GMT</pubDate></item></channel></rss>