problem mit protcted ( class ),bitte um hilfe!
-
hi, ich habe hier folgenden Bsp. code in dem ich in der klasse a eine variable erstelle und diese mit einer funktion der class a auf 1 setze, nun leite ich eine class b ab um mit einer funktion diese variable auf 5 zusetzen. fuehrt man folgenden code aus, wird aber die variable nicht veraendert und bleibt unveraendert auf 1. wieso ist das so... und kann mir einer damit helfen, danke.
//--------------------------------------------------------------------------- #include <iostream> using namespace std; class a { public: void set(); void get(); protected: int var; }; void a::set() { this->var = 1; } void a::get() { cout << this->var << endl; } class b : public a { public: void Set(); }; void b::Set() { a::var + 5; } int main(int argc, char* argv[]) { a *A = new a; b *B = new b; A->set(); A->get(); // var = 1 getchar(); B->Set(); // soll var auf 5 setzen A->get(); // müsste var = 5 wieder geben getchar(); return 0; } //---------------------------------------------------------------------------
-
Da du der Variable gar keinen neuen Wert zuweißt:
[...]
a::var + 5;
[...]Eher so:
a::var = 5; // bzw.: a::var += 5;
-
negativ, es ist egal ob ich += 5 oder = 5 schreibe es aendert sich nichts.
-
T0bi schrieb:
B->Set(); // soll var auf 5 setzen A->get(); // müsste var = 5 wieder gebenWenn Du B veränderst, solltest Du auch B ausgeben. A und B sind unabhängige Objekte, auch wenn die Klassen verwandt sind...
-
hmm.... neeeheeeee will des aber net so..... wie schaff ich es denn nun das es so funktioniert wie ich es mir so vorgestellt habe??? bräuchte diesen lösungsweg auf alle fälle. danke
-
T0bi schrieb:
hmm.... neeeheeeee will des aber net so..... wie schaff ich es denn nun das es so funktioniert wie ich es mir so vorgestellt habe??? bräuchte diesen lösungsweg auf alle fälle. danke
Du bist ja lustig, wie haste Dir das den _genau_ vorgestellt ?
SO geht es eben NICHT.
-
... int main(int argc, char* argv[]) { b *B = new b; B->set(); B->get(); // gibt 1 getchar(); B->Set(); B->get(); // gibt 6 (1+5) getchar(); return 0; }Das kleingeschriebene set ist dann das von class a und das grossgeschriebene von class b... Wenn dort a::var += 5 steht

<nickel> Achja, da fehlt noch ein delete B; </nickel>
-
T0bi schrieb:
hmm.... neeeheeeee will des aber net so..... wie schaff ich es denn nun das es so funktioniert wie ich es mir so vorgestellt habe??? bräuchte diesen lösungsweg auf alle fälle. danke
Willst Du vielleicht das:
int main(int argc, char* argv[]) { b *B = new b; a *A = b; A->set(); A->get(); // var = 1 getchar(); B->Set(); // soll var auf 5 setzen A->get(); // müsste var = 5 wieder geben getchar(); delete B; return 0; }??
Mal kleine (aber nicht unwichtige) Style-Tipps:
- Wenn man GroßKleinschreibung unterscheidet: Es ist üblicher, Klassen Groß und Variablen klein zu schreiben.
- fast gleichlautenden Funktionsnamen für Funktionen, die unterscheidliches machen, sind seeeehr fehleranfällig.
Gruß,
Simon2.