[C++] variable Objekte?

Ich möchte auf verschiedene Arten Daten einlesen, z.b. einmal aus einer Textdatei, dann aus einer Datenbank, dann aus…

Dazu will ich verschiedene Klassen benutzen, die die gleichen Funktionen haben, wie kann ich jetzt je nach Bedingung ein Objekt eines bestimmten Types erstellen.

Also nach dem Motto

if (soundso)
{
 varClass = CTextFile;
}
else
{
 varClass = CDatabase;
}

varClass meinObjekt;
meinObjekt.Einlesen();

also es soll je nachdem ob die Bedinung soundso erfüllt ist mal ein Textfile und mal ein Database Objekt erzeugt werden.

Thanx Bruno

Du könntest dir eine Templateklasse erstellen, die alle benötigten Funktionen enthält. Beim anlegen einer neuen Instanz deiner Templateklasse initialisierst du sie dann mit der gewünschten Instanz.

Grüße
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Zunaechst musst du eine abstarkte Basisklasse erstellen, die die gemeinsame Schnittstelle auf die jeweiligen Danten spezifiziert.

z.B. class Daten
{
virtual int ReadData(*Buffer)=0;
virtual int WriteData(*Buffer)=0;
usw.
}

Dann kannst du weitere Klassen ableiten, die den Dateitypen entsprechen

class Text public Daten
{
Text(const char* PATHNAME)
{
code;
}
int ReadData(*Buffer)
{
code
}
}

Danach kannst du auf alle Einheitlich mit den Methoden von daten zugreifen.

Beim Erstellen ergint sich dann:

Daten * it;
if (soundso)
{
it=new Text(PATHNAME)

}

MFG
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

…bin ich dumm…
Wieso mach ich nicht einfach

if (soundso)
{
 CTextFile myObject;
}
else
{
 CDatabase myObject;
}



> ) so einfach isses hehe...

Aber hier ist myObject im falschen Kontext definiert worden, d.h. außerhalb der geschweiften Klammern ist myObject i.d.R nicht definiert.

Wie schon die Vorredner geschrieben haben, entweder eine Template-Klasse definieren, oder eine Basis-Klasse deklarieren.

MfG Frank

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ups klar, ich bin ja noch dümmer als gedacht, das mit Templates gefällt mir weniger mal das mit der Basisklasse genauer anschauen das blick ich noch ned so…

Bru

Wieso mach ich nicht einfach

if (soundso)
{
CTextFile myObject;
}
else
{
CDatabase myObject;
}

) so einfach isses hehe…

Aber hier ist myObject im falschen
Kontext definiert worden, d.h. außerhalb
der geschweiften Klammern ist myObject
i.d.R nicht definiert.

Wie schon die Vorredner geschrieben
haben, entweder eine Template-Klasse
definieren, oder eine Basis-Klasse
deklarieren.

MfG Frank