Kopie einer Basisklasse
-
Hi Leute,
ich lese eine Datei mit "Objekten" ein. Da nicht klar ist in welcher Reihenfolge die Attribute in der Datei stehen, speichere ich alle Daten in einer Basisklasse. Alle Objekte haben die gleichen Member, aber unterschiedliche Ausprägungen ihrer Funktionen. Irgendwann kommt dann das Attribut, dass mir sagt um welches Objekt es sich handelt (Bsp. Haus).
Wie kann ich nun die Instanz der Basisklasse in eine Instanz der Haus Klasse umwandeln?
class haus : public base /* ... */ basis* temp; // << Pointer auf das Objekt mit den bereits eingelesenen Daten haus* neu = temp;Danke im Voraus
Scarabol
-
class Base { }; class Derived: public Base { public: Derived(Base base): Base(base) {}; }; int main() { Base foo; Derived bar = foo; }Dein Design klingt aber nicht sehr sinnvoll. Klingt eher so, als wolltest du freie Funktionen, um die Funktionalität der Basisklasse zu erweitern.
-
ja stimmt das Design könnte besser sein, kenn mich da leider nicht so gut aus. Hast du Vorschläge?
Gruß
ScarabolPS:
Danke deine Lösung funktioniert super!
-
Schau dir evtl. mal das Builder Pattern an

-
Scarabol schrieb:
ja stimmt das Design könnte besser sein, kenn mich da leider nicht so gut aus. Hast du Vorschläge?
Wenn deine abgeleitete Klasse weder neue Member hat, noch virtuelle Funktionen überschreibt, dann ist es eine Funktionserweiterung der Basisklasse. Das ruft, wie schon gesagt, nach freien Funktionen.
-
Meine Klasse Haus überschreibt schon eine Funktion der Basisklasse, zählt das nicht?
Mit freien Funktionen meinst du statische?
-
Scarabol schrieb:
Meine Klasse Haus überschreibt schon eine Funktion der Basisklasse, zählt das nicht?
Das kann richtig sein. Klang in deinem ersten Beitrag anders.
Mit freien Funktionen meinst du statische?
Nein. Ganz frei, ohne zu einer Klasse zu gehören.
-
und die sollen mir dann aus meiner Basisklasse ein Haus bauen?
-
Scarabol schrieb:
und die sollen mir dann aus meiner Basisklasse ein Haus bauen?
Nein. Deine ursprüngliche Beschreibung klingt so, als wäre ein Haus keine Spezialisierung der Basisklasse, weil du nur Funktionen hinzufügst. Dann ist Vererbung das falsche Sprachmittel und du willst eigentlich ein ganz anderes Design, so dass die ganze Frage wie man ein Haus aus einer Basisklasse macht unnötig wird.
-
Der erste Ansatz hat super funktioniert, also daher Problem gelöst

Danke
Scarabol