Membervariable in anderer Klasse verändern?
-
Hallo,
ich würde gerne eine Membervariable in einer anderen Klassse verändern, schaffe es aber nicht:
Hier ein Minimalbeispiel:#include<iostream> class B { public: B(int test_) {test = test_;} void bar() { test = 8;} int test; }; class A { public: A(int test_) {test = test_ ;}; void foo() { B* b = new B(test); b->bar();} int test; }; int main(int argc, char** argv) { A* A1 = new A(3); A1->foo(); // HIer sollte dann 8 stehen - tuts aber nicht std::cout << A1->test << std::endl; return 0; }
für hilfe wäre ich dankbar
-
Du übergibst nur eine Kopie der Variabel. Was du suchst sind Referenzen bzw. Zeiger. Das könnte so aussehen:
#include<iostream> class B { public: B(int& test_) : test(test_) {} void bar() { test = 8;} int& test; }; class A { public: A(int test_) {test = test_ ;}; void foo() { B* b = new B(test); b->bar();} int test; }; int main(int argc, char** argv) { A* A1 = new A(3); A1->foo(); // HIer sollte dann 8 stehen - tuts aber nicht std::cout << A1->test << std::endl; return 0; }
-
Noch was: Wenn du Speicher mit new anforderst, dann musst du diesen mit delete auch wieder freigeben, ansonsten erzeugst du Speicherlöcher!
-
Bei diesem einfachen Beispiel sollte man auf new ganz verzichten.
Kommt da jemand von Java?
-
Außerdem hätte ich für unterschiedliche Klassen nicht denselben Membervariablennamen genommen (sondern test_A, test_B oder so).
-
[Rewind] schrieb:
Außerdem hätte ich für unterschiedliche Klassen nicht denselben Membervariablennamen genommen (sondern test_A, test_B oder so).
Das spielt doch gar keine Rolle, da der Scope jeweils ein anderer ist. Außerdem handelt es sich eh um Beispielcode.