Klassenproblem



  • Moin, bin neu hier, hoffe ihr könnt mir mit diesem wahrscheinlich recht einfachen Problem helfen.

    class test1{
    	public:
    		test1(){argu = 2;}
    		void setargu(int erst){	argu = erst;}
    		int getargu(){	return argu;}
    	private:
    		int argu;
    };
    
    class test2{
    	public:
    		test2()
    		{argu2 = test1();
    		}
    		test1 getargu2()
    		{return argu2;
    		}
    	private:
    		test1 argu2;		
    };
    
    int main(void)
    {
    	test2 hallo = test2();
    	hallo.getargu2().setargu(4);
    	cout << hallo.getargu2().getargu();
    
    }
    

    Also ich hab zwei Klassen. Die zweite hat als Eigenschaft/Mitglied ein Objekt der ersten Klasse. Ich versuch jetzt über ein Objekt der 2. Klasse das Objekt der ersten Klasse zu verändern, so wie ich es gemacht habe funktioniert es nicht.
    Ich vermute, dass ich irgendwas mit Pointern machen muss. Ne Idee was genau?



  • Schon fast, nicht mit Pointern. Mit Referenzen. So wie es jetzt ist, gibt getargu2 eine Kopie von argu2 zurück. Soll es eine Referenz darauf zurückgeben, ändert sich der Code so:

    test1& getargu2()
      {
        return argu2;
      }
    

    BTW ist dein Konstruktor von test2 überflüssig.



  • Du übergibst durch das return nur eine Kopie deiner Klasseninstanz.

    Die zweite hat als Eigenschaft/Mitglied ein Objekt der ersten Klasse.

    Eigenschaft/Mitglied ist durch Attribut zu ersetzen. 🙂
    OK; also hier die Lösung:

    class test1{
        public:
            test1(){argu = 2;}
            void setargu(int erst){    argu = erst;}
            int getargu(){    return argu;}
        private:
            int argu;
    };
    
    class test2{
        public:
            test2()
            {argu2 = test1();
            }
            test1& getargu2()
            {return argu2;
            }
        private:
            test1 argu2;       
    };
    
    int main(void)
    {
        test2 hallo = test2();
        hallo.getargu2().setargu(4);
        cout << hallo.getargu2().getargu();
    
    }
    

    Das & ist wichtig, es macht aus dem Rückgabetyp eine Referenz, sodass der Zugriff sich nicht auf eine Kopie auswirkt, sondern wirklich mit dem Objekt verhandelt wird.
    was bringt dir der ctor von test2? der ist sinnlos.

    MfG mAV 🙂



  • Danke für die prompte Hilfe.

    Ich komm von Java, und da ist das meiner Meinung nach alles etwas einfacher. Grad OO-Programmieren ist da ein Traum. Auch nix mit Pointern, Referenzen und ähnlichem Zeugs.

    Der Konstruktor ist überflüssig?
    Wird also wenn ich ein ein Objekt erzeuge, das Attribut automatisch initialisiert?



  • wenn es einen standardkonstruktor hat (also einer ohne parameter), dann schon.


Anmelden zum Antworten