Klassen in Klassen (C++)



  • Hallo,

    Seit längerem schon programmiere ich in C, und habe ich kürzlich angefangen C++ zu lernen. Um praktische Erfahrung mit C++ zu sammeln bin ich gerade dabei, mein letztes Projekt, ein Computergegner für das Spiel "Schiffe versenken", welches ich in C geschrieben habe, in C++ zu übersetzen.
    Mein Hauptaugenmerk lag dabei zunächst in der Erstellung von Klassen, welche die Objekte des Spiels repräsentieren (Spielfeld, Schiffe und Spieler) .
    In C habe ich diese Objekte mit structs realisiert, wobei das Spielfeld und die Schiffe Teil der Spieler-struct sind:

    struct spieler_
    {

    struct schiff_ schiff[ANZAHL_SCHIFFE];
    int feld[BREITE][HOEHE];
    // ...

    } spieler[SPIELERANZAHL];

    Das hat auch problemlos funktioniert.
    Dies versuchte ich nun mit Klassen zu realisieren. Während die Erstellung der Klassen "schiff" und "feld" keine Probleme bereitete, ließen sie sich nicht in die Klasse "spieler" eingliedern.

    Leider habe ich trotz intensiver Suche auf einschlägigen Seiten keine wirkliche Lösung für dieses Problem gefunden.

    Gibt es eine Möglichkeit wie ich eine Klasse innerhalb einer anderen Klasse deklariere, ohne eine "nested class" innerhalb der Klasse zu erstellen? Gibt es eine Möglichkeit die der Vorgehensweise bei structs in structs ähnelt?
    Wenn ja, wie kann ich der inneren Klasse dann die Parameter für den Konstruktor übergeben?

    Für Hilfe wäre ich sehr dankbar 🙂
    Tobias



  • dunkelbunt42 schrieb:

    Gibt es eine Möglichkeit wie ich eine Klasse innerhalb einer anderen Klasse deklariere, ohne eine "nested class" innerhalb der Klasse zu erstellen? Gibt es eine Möglichkeit die der Vorgehensweise bei structs in structs ähnelt?

    Meinst du sowas?

    class Foo {
      // …
    }
    
    class Bar {
      // …
    }
    
    class Foobar {
      Foo just_a_foo;
      Bar this_is_a_bar;
    }
    

    Wenn ja, wie kann ich der inneren Klasse dann die Parameter für den Konstruktor übergeben?

    Ungefähr so:

    class Foobar {
      Foo just_a_foo;
      Bar this_is_a_bar;
    public:
      Foobar(const std::string& foo_param, int bar_param)
      : just_a_foo(foo_param), this_is_a_bar(bar_param)
      {}
    }
    

    Natürlich komplett ungetestet und nur schnell so dahingeschrieben, aber du siehst wohl, worauf es hinausläuft.



  • ah, danke schön 🙂 mein Problem war die Übergabe der Parameter an die inneren Klassen. Aber jetzt geht es 🙂 Danke nochmal



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply