Announcement

Collapse
No announcement yet.

Grundlegende Frage zu Instanzen - Laufzeiterzeugung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Grundlegende Frage zu Instanzen - Laufzeiterzeugung

    Hallo,
    Ich habe zwei Fragen zur Erstellung und Handhabung von Instanzen zur Laufzeit in C++:

    1.) Angenommen ich habe eine Klasse definiert, die einen Kreis darstellt. Zur Laufzeit (!) des Programms soll nun der Benutzer z.B. per Mausklick beliebig viele Instanzen erzeugen können. Wie mache ich das? Ich kann ja keine Namen im voraus vergeben. Wie greife ich dann auf die Instanzen zu? Meine einzige Idee war ein 1D-Array dieser Klasse zu nehmen und dann über den Index auf die Instanzen zuzugreifen. Aber geht das wirklich nur so?

    2.) Schon etwas komplizierter: Angenommen ich habe eine Klasse "Tier" definiert, die die Elementfunktion "Laufen" besitzt. Von dieser Klasse "Tier" erben nun z.B. zwei Klassen "Hund" und "Katze" diese Elementfunktion.
    An einer bestimmten Stelle des Programms (um anschaulich zu bleiben, in der Funktion "Pfiff" ) soll nun bei allen Instanzen von Hund und Katze die Methode "Laufen" ausgeführt werden.
    Da die Instanzen von Hund und Katze aber zur Laufzeit erstellt werden, kann ich Laufen() aber nicht einfach in Pfiff() aufrufen... Außerdem kann ich bei zwei verschiedenen Typen (Hund und Katze) auch nicht mit einem Array arbeiten...

    Ich hoffe ich konnte verständlich machen, wo bei mir die Frage liegt. Es ist immer schwer zu fragen, wenn man eigentlich nicht richtig weiß, wonach man sucht...
    MfG Jacob2

    Meine Website mit Roboter-, Elektronik- und Softwareprojekten: www.roboterbastler.lima-city.de

  • #2
    Man speichert die Instanzen in irgendeiner Form von Array. Hierfür sollte ein dynamisches Array genutzt werden siehe bsp. STL Vector

    Da die Instanzen von Hund und Katze aber zur Laufzeit erstellt werden, kann ich Laufen() aber nicht einfach in Pfiff() aufrufen...
    Sicherlich geht das.

    Außerdem kann ich bei zwei verschiedenen Typen (Hund und Katze) auch nicht mit einem Array arbeiten...
    Sicherlich geht das auch. Warum sollte man Zeiger nicht in eine Array legen können, zumal beide Klassen von Tier abstammen und ein Array dann auf dieser beruht
    Christian

    Comment


    • #3
      Erstmal vielen Dank für Deine Antwort!

      Aber wie stelle ich das mit den Zeigern an? Der Vektor muss ja vom Typ "Tier" sein, um sowohl Hund als auch Katze beinhalten zu können, oder?

      Ich habe folgendes probiert, aber es funktioniert nicht:
      Code:
      vector<Tier> *Kontainer(0);
      ...
      //Hunde-Instanz erzeugen
      Kontainer->reserve(Kontainer->size() + 1); //Kapazität um 1 erhöhen
      Kontainer[Kontainer->size()-1] = new Hund;
      MfG Jacob2

      Meine Website mit Roboter-, Elektronik- und Softwareprojekten: www.roboterbastler.lima-city.de

      Comment


      • #4
        "Funktioniert nicht" ist kein Fehler.

        http://www.sgi.com/tech/stl/Vector.html

        vector<int> test(100);

        test.insert(test.end(),2);


        vector<Tier> tiere(100);

        tiere.insert(tiere.end(),new Tier());
        Christian

        Comment


        • #5
          Sorry, dachte das ist eh grob falsch...

          Ich hab das jetzt so gemacht...
          vector<Tier> tiere(100);

          tiere.insert(tiere.end(),new Tier());
          ...aber der Fehler lautet immernoch:
          Code:
          Could not find a match for 'std::vector<Tier>::insert(Tier*, Tier*)'
          Zuletzt editiert von Jacob2; 14.01.2011, 18:27.
          MfG Jacob2

          Meine Website mit Roboter-, Elektronik- und Softwareprojekten: www.roboterbastler.lima-city.de

          Comment


          • #6
            Du erzeugst doch Hunde und Katzen...
            Christian

            Comment


            • #7
              Ja, aber um bei deinem Beispiel zu bleiben habe ich erstmal Tier gleich Tier sein lassen... Falsch?

              Warum sind die Parameter der insert-Funktion in der Fehlermeldung eigentlich Tier* und nicht Tier? Kann es sein, dass da der Fehler liegt?
              MfG Jacob2

              Meine Website mit Roboter-, Elektronik- und Softwareprojekten: www.roboterbastler.lima-city.de

              Comment

              Working...
              X