Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Welche Klasse als Basisklasse für Datenbankklasse verwenden?



BLUESCREEN3D
15-03-2006, 22:13
Ich will in C++ eine Klasse für den Datenbankzugriff schreiben.

Diese sollte es ermöglichen, dass man mit Hilfe von operator<<() den Query zusammensetzen kann.

Deshalb habe ich mir überlegt, dass es sinnvoll wäre, std::ostringstream als Basisklasse zu verwenden. Allerdings muss es auch möglich sein, den Query in einen C-String umzuwandeln (so wie mit std::string::c_str()). Nun enthält std::ostringstream diese Funktion aber nicht, d.h. ich müsste die selber schreiben, was wohl nur über den Umweg eines Strings geht:

string tmp(this->str());
return(tmp.c_str());

Deshalb wäre es vllt. besser, std::stringstream als Basisklasse zu nehmen, da diese die Funktion read() enthält wodurch kein Umweg über einen String nötig ist.

Oder ich nehme std::string als Basisklasse, müsste dann aber operator<<() hinzufügen, was wohl der umständlichste Weg wäre...

Mehrfachvererbung von std::ostringstream und std::string ist auch keine Lösung, da die Funktionen operator<<() und c_str() dann auf unterschiedliche Strings zugreifen.

Was meint ihr, welche Klasse sich in diesem Fall am besten als Basisklasse eignet? Ich tendiere momentan zu std::stringstream...

SeeksTheMoon
15-03-2006, 23:20
Wozu willst Du unbedingt eine Basisklasse aus der Standardbibliothek wählen?
Operatoren kannst Du überladen und die Datentypen stehen Dir auch zur Verfügung ohne so eine Basisklasse zu wählen.

BLUESCREEN3D
16-03-2006, 01:20
Ich halte das für die einfachste Möglichkeit, wenn die gleichen Funktionalitäten wie in diesen Klassen benötigt werden.

RHBaum
16-03-2006, 08:24
Ich halte das für die einfachste Möglichkeit, wenn die gleichen Funktionalitäten wie in diesen Klassen benötigt werden.

Zitat aus so nem oberschlauen Designbuch:


Vererbe nie um Wiederzuverwenden,
vererbe nur um wiederverwendet zu werden !


Zu deutsch, solltest du nur von std::ostringstream ableiten, wenn du irgenwo nen Object hasst dem du dein selbstgebautes Dings als std::ostringstream unterschieben musst, also der an deinem Object unbedingt std::ostringstream funktionen aufrufen will.

Alles andere ist faulheit und schlechtes design ^^

Das sollt dich aber nich von abhalten, dein object so zu schreiben das es sich wie nen std::ostringstream verhaelt ^^ selbst nen std::ostringstream selber keonntest du verwenden, aber nur per aggregation /composition

Ciao ...

BLUESCREEN3D
16-03-2006, 20:30
Mit der Aggegration hast du irgendwie Recht, schließlich ist der Query nur ein Element der DB-Klasse...

Dann werde ich das wohl so umsetzen, woraus sich gleich das nächste Problem ergibt: http://www.mrunix.de/forums/showthread.php?p=198891