dayn. Array aus Klassenobjekten



  • Guten Tag,

    ich muss ein Array von Klassenobjekten zur Laufzeit anlegen. Eine Methode 'datensaetze()' liefert mit die entsprechende Anzahl 'intAnz', die ich dann als Parameter für das Array einsetzen wollte:

    class ClaTitelsatz * arrDaten = new arrDaten[intAnz];

    Geht aber nich. Wie geht das denn?
    Bin dankbar für jeden Hinweis.

    Gruss Manu

    #include <iostream>
    #include <sstream>

    using namespace std;

    class ClaTitelsatz
    {
    private:
    string strAUT;
    string strJAH;
    string strTIT;
    public:
    void einlesen();
    void ausgeben();
    };

    int main()
    {
    // Anzahl der Datensätze mit der Methode 'datensaetze()'
    // zur Lauzeit ermitteln. Lassen wir jetzt mal weg!
    // intAnz = datensaetze();
    int intAnz = 10;
    // Datensatzarray entsprechender Grösse dynamisch anlegen.
    // DAS GEHT ABER NICH?
    //class ClaTitelsatz * arrDaten = new arrDaten[intAnz];

    // Was natürlich geht, aber ich weiss ja die Anzahl der
    // Datensätze noch nicht.
    class ClaTitelsatz arrDaten[10];

    for (int i = 0; i < intAnz; i++)
    arrDaten[i].einlesen();

    for (int j = 0; j < intAnz; j++)
    arrDaten[j].ausgeben();

    return 0;
    }

    void ClaTitelsatz::einlesen()
    {
    strAUT = "Autor";
    strTIT = "Titel";
    strJAH = "2005";
    }

    void ClaTitelsatz::ausgeben()
    {

    cout << "Autor: " << strAUT << endl;
    cout << "Titel: " << strTIT << endl;
    cout << "Jahr : "<< strJAH << endl << endl;
    }



  • kurz und knapp:

    ClaTitelsatz *arrDaten = new ClaTitelsatz[intAnz];
    

    ...und zum Schluss das delete [] nicht vergessen.



  • DANKE!

    Manu



  • Bei "dynamsichen Arrays" lohnt sich auch immermal einen Blick in die Standardbibliothek, da gibts nämliche schöne Listen,Vectoren usw...
    Ist natürlich immer ne Frage von Kosten/Nutzen, aber in der Regel sollte man schon versuchen die C++ Objekte zu verwenden wenn es sie schon gibt. Sonst kann man auch glecih C schreiben.


Anmelden zum Antworten