Basisklasse in Abgeleitete Klasse kopieren?
-
Hallo,
irgendwie sitze ich gerade aufm Schlauch
ich habe folgendes.#include <iostream> using namespace std; class base{ public: base(){ var1 = 1; } protected: int getVar1(){ return var1; } private: int var1; }; class derived : public base{ public : derived(){ var1 = 3; } }; int main() { derived d; base b; d = b; cout << d.getVar1 << endl; return 0; }Ich möchte praktisch eine Copy erstellen, die allerdings die privaten Daten mitkopiert, da ich diese privaten Daten für Funktionen in der Abgeleiteten Klasse benötige.
Und um es noch weiter runter zu brechen. Ich möchte eine existierendes Objekt um Funktionen erweitern.Also ich will bei einem fahrendem Auto den Motor tunen

Gruß
wdsl
-
Und deine Frage ist?
-
Wie man ein existierendes Objekt erweitern kann.
-
class base{ public: base(int foo = 1) : var1(foo) { } protected: int getVar1(){ return var1; } private: int var1; }; class derived : public base{ public : derived() : base(3) { } };Alternativ,
var1auchprotectedmachen. Dafür sind die Schlüsselwörter da.
-
#include <iostream> using namespace std; class base { public: base(const int& var): var(var){ } virtual ~base(){} virtual const int& getVar() const {return var;} private: int var; }; class derived : public base { public : derived(const int& var): base(var){} const int& getVar() const {return base::getVar();} }; int main() { derived d(3); cout << d.getVar() << endl; base b(1); d = b.getVar(); cout << d.getVar() << endl; cin.get(); return 0; }Alternativ Operatorüberladung.
-
AnderesBeispiel schrieb:
class base { public: base(const int& var): var(var){ } virtual ~base(){} virtual const int& getVar() const {return var;} private: int var; }; class derived : public base { public : derived(const int& var): base(var){} const int& getVar() const {return base::getVar();} };Zwei Dinge:
intwürde ich als Kopie und nicht als Referenz aufconstüber- und zurückgeben. Referenzübergabe als Optimierung lohnt sich erst bei grösseren Objekten, bei kleinen ist sie sogar kontraproduktiv (weil Referenzen auch kopiert werden müssen und zusätzlich Dereferenzierungskosten anfallen).- Die Funktion
getVar()muss weder virtuell sein noch in der abgeleiteten Klasse überschrieben werden, wenn ihr Verhalten für beide Klassen identisch ist.
Meinst du mit Operatorüberladung die Stream-Operatoren?
-
AnderesBeispiel schrieb:
#include <iostream> using namespace std; class base { public: base(const int& var): var(var){ } virtual ~base(){} virtual const int& getVar() const {return var;} private: int var; }; class derived : public base { public : derived(const int& var): base(var){} const int& getVar() const {return base::getVar();} }; int main() { derived d(3); cout << d.getVar() << endl; base b(1); d = b.getVar(); cout << d.getVar() << endl; cin.get(); return 0; }Alternativ Operatorüberladung.
Was für ein mieser Code. Auf keinen Fall sowas nachprogrammieren!
-
wdsl schrieb:
...
Wie man ein existierendes Objekt erweitern kann.Was meinst Du damit? Mir ist das Problem nicht klar. Was soll das überhaupt mit der Zuweisung von einem derived-Objekt zu einem base-Objekt?