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. 😉


Log in to reply