Instanzierung über for schleife



  • Hallo,

    Ich habe folgende Frage:

    Ich möchte ein integer vorgeben. Eine Klasse wird nun so oft instanziert wie der Wert des integer vorgibt. Also quasi

    int a;
    for(a;a>0;a--)
    {
    MyClass* MyInstance = new MyClass()
    }
    

    Nun muss aber jede Instanz einen eigenen Namen haben. Hiernach würden ja alle den gleichen bekommen. Wie soll das nun gehen?
    An genau der Stelle endet leider mein Wissen.

    Bitte um Hilfe

    Dank im Vorraus
    Thorsten


  • Mod

    Da fehlen Grundlagen, die man nicht mal eben kurz erklären kann. Hier zwei Stichworte die dir helfen, dir selbst zu helfen:

    1. Arrays
    2. std::vector

    Außerdem: Hast du früher Java programmiert? Ich habe den Eindruck, du weißt nicht so recht, wozu man in C++ new verwendet und wann man new überhaupt nicht braucht. Du solltest dir das nochmal angucken.



  • Hi,

    ach, ich habe gerade Langeweile: 😉

    #include <vector>
    #include <iostream>
    
    int main() {
       unsigned int a;
       if(!(std::cin >> a) || a < 1) {
          std::cerr << "Falsche Eingabe!\n";
          return 1;
       }
    
       std::vector<MyClass> myInstances;
    
       for(a;a>0;a--) myInstances.push_back(MyClass());
    
       myInstances[0].mach_was(); // ruft mach_was() vom ersten MyClass-Objekt auf
    }
    

    Ergo: Du bekommst nicht a viele "Namen", sondern einen Namen (myInstances), hinter dem sich alle Instanzen verbergen (besser: Über den alle Instanzen verwaltet werden).

    Im konkreten Fall (Default-initialisierte Objekte) würde statt der SChleife sogar reichen:

    ...
       std::vector<MyClass> myInstances(a);
    
       myInstances[0].mach_was(); // ruft mach_was() vom ersten MyClass-Objekt auf
    }
    

    Gruß,

    Simon2.

    P.S.: Wenn Du nicht selbst sicherstellen kannst/willst, dass Du nur auf Elemente von myInstances zugreifst, die es auch gibt, nimmst Du nicht "[]", sondern ".at()":

    ...
       myInstances.at(0).mach_was();
    }
    

    Dann fliegt im Fehlerfall eine Exception.


Anmelden zum Antworten