# Dynamische Klassen erstellen .. oder doch struct?



## mæstrø (31. März 2007)

Hallo,

Bin eher neu in C++ und hab folgendes Problem:

Ich will in ein Programm mehrere Dateien reinladen, eine bis einige hundert, nun will ich die Informationen zur Datei (Pfad, Name, Inhalt etc.) in einer eigenen Klasse speichern. Also für jede Datei will ich eine eigene Klasse die ich aus einer Beispiel-Klasse erstelle.

Also z.B.:

NewFile^ File1 = gcnew NewFile;

wobei NewFile die Beispiel-Klasse ist und File1 die Eigenschaften von dieser übernimmt.

nur sollte der name "File1" dynamisch erstellt werden ... d.h. wenn ich eine 2te Datei reinlade  dann soll er z.B. "File" + "2" = "File2" dort hinschreiben da ich ja nicht mehrere hundert klassen im vorraus definieren kann.

oder geht das besser mit struct?

ich hoffe ich habe mich klar ausgedrückt und danke für eure antworten

Ps.: arbeite mit VC++ 2005 Express

mfg Maestro


----------



## Turri (31. März 2007)

Hallo,

ich würde das wie folgt bewerkstelligen...


```
#include <list>
#include <iostream>

class Datei
{
  private:
    std::string name;
    std::string pfad;
    std::string inhalt;
    ...

  public:
    Datei(){}
    Datei(std::string name, std::string pfad, std::string inhalt);
    ...
}

class Dateiverwaltung
{
  private:
    list<Datei*> dateiliste;  // hier kannst du einige 100 Dateien verwalten

  public:
    ....
    void einfuegen(Datei*);
    ...
}
```

cpp

```
void Dateiverwaltung::einfuegen(Datei* datei)
{
    dateiliste.push_back(datei);
}
```

Dann machst du als Aufruf immer


```
Dateiverwaltung* dv = new Dateiverwaltung();
Datei* datei = new Datei;
dv->einfuegen(datei);
```

Dateiverwaltung aber nur einmal anlegen 

MfG Turri


----------



## mæstrø (2. April 2007)

Das hat mir schon mal weitergeholfen, danke

hab aber noch immer das problem das ich die pfade als string array habe und ich nicht weiß wie ich so einen pfad, bzw den dateinamen asl string aus dem pfad, in "Datei* datei = new Datei;" als "datei" verwenden kann. oder habe ich da etwas falsch verstanden?

mfg


----------



## Turri (2. April 2007)

Du solltest die Klasse "Datei" noch erweitern, um mindestens die Funktionen GetName, GetPfad und GetInhalt.

```
std::string Datei::GetPfad()
{
  return pfad;
}
```


```
Dateiverwaltung* dv = new Dateiverwaltung();
Datei* datei = new Datei("deinName","deinPfad","deinInhalt");
dv->einfuegen(datei);
...
// wenn du den Pfad wieder nutzen willst....
std::string path = datei->GetPfad();
```

Solltest du noch etwas mehr erweitern... ist aber nur ein Vorschlag ;-)

MfG Turri


----------

