Unterschiedliche Ausgabe bei Vererbung mit Klassen
-
Hi,
ich habe in meinem Programm zwei Klassen deklariert und die public-Elemente der einen der anderen vererbt(um es zu vereinfachen nenne ich dieKlassen KlasseA und KlasseB). Nun verändere ich eine Variable(hier zahl), die ich in der ersten Klasse deklariert habe, mit einer Funktion aus der zweiten Klasse.
Lass ich nun diese Variable durch eine Vererbung der zweiten Klasse ausgeben so erhalte ich das gewünschte Ergebnis(10), mach ich dies allerdings mit der Verererbung der ersten Klasse so hat sich die Variable nicht verändert. Nun frage ich mich woran das liegt, da ja die gleiche Variable verändert wird. Zur weiteren Erklärung ein bisschen Quellcode:class KlasseA { protected: //.... public: int zahl; KlasseA(); }; KlasseA::KlasseA() { zahl=0; } class KlasseB : public KlasseA { protected: //.... public: void veraendere_zahl(); }; void KlasseB::veraendere_zahl() { zahl+=10; } int main() { KlasseA vererbungA; KlasseB vererbungB; vererbungB.veraendere_zahl(); cout<<"Zahl von KlasseA: "<<vererbungA.zahl<<;//Ausgabe ist 0 cout<<"Zahl von KlasseB: "<<vererbungB.zahl<<;//Ausgabe ist 10 return 0; }
Könnt ihr mir helfen?
Gruß Lars
-
Die konkreten Objektinstanzen vererbungA und vererbungB haben nichts miteinander
zu tun. Also, was erwartest du.
-
vererbungA und vererbungB sind ja zwei verschiedene Datentypen und beide haben ne andere variable namens zahl,weil du bei vererbungB auch die Memberfunktion aufgerufen hast !!!
-
Mach die Variable static
-
Hi,
Statiker schrieb:
Mach die Variable static
static int zahl;
Wenn ich es so mache, dann erhalte ich beim Kompilieren einen Linkerfehler:
[Linker error] undefined reference to `KlasseA::zahl'
Also wie kann ich es bewerkstelligen, dass ich eine Variable, die ein Element der einen Klasse ist, durch eine Funktion verändere die ein Bestandteil der zweiten Klasse ist?
Gruß Lars
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-109243.html --> vorletzter Beitrag
-
Lars() schrieb:
Nun frage ich mich woran das liegt, da ja die gleiche Variable verändert wird.
Das wird sie nicht.
Bye, TGGC (Keine Macht den Dummen)
-
Hi,
Statiker schrieb:
Mach die Variable static
static int zahl;
Wenn ich es so mache, dann erhalte ich beim Kompilieren einen Linkerfehler:
[Linker error] undefined reference to `KlasseA::zahl'
Also wie kann ich es bewerkstelligen, dass ich eine Variable, die ein Element der einen Klasse ist, durch eine Funktion verändere die ein Bestandteil der zweiten Klasse ist?
Gruß Lars
-
Das hatten wir eben erst.
Bye, TGGC (Keine Macht den Dummen)