Getter und Setter Anwendung



  • Na siehst Du. Und jetzt noch den Code korrekt kommentieren:

    // zur Verwirrung der Russen lasse ich das 'o' in Aperiode mal weg. Ist ja sonst langweilig:
    	double getAperideA()
    	{
    		return m_Aperiode ;
    	};
    	// kümmere Dich nicht darum, was der Anwender übergibt sondern setze die Variable immer
    	// auf den Wert 9!
    	void setAperiodeA(double a)
    	{
    		m_Aperiode = 9;
    	}
    };
    

    :p

    Ach ja - was war nochmal die Frage?



  • Ich mach mal weiter.

    MarcelGast schrieb:

    cpp File von class B

    void B::auswertung()
    {
    	A a;
    	int i = 0;
            // setze periode auf wert der periode selber
            // macht ja nichts, weil der Setter das Argument eh ignoriert
            // ignoriere auch konsequent den Getter, sondern greife einfach so auf die public Variable zu
    	a.setAperiodeA(a.m_Aperiode);
    	if (a.getAperideA() > 0)
    	{
    		cout << " blabla" << endl;
    	}
    }
    


  • Ist das Okay, wenn ich der Member Variable " m_Aperiode" als public deklariert habe?



  • MarcelGast schrieb:

    Ist das Okay, wenn ich der Member Variable " m_Aperiode" als public deklariert habe?

    Nein. Damit sind Getter und Setter überflüssig.



  • Wie kann ich dann besser machen?



  • Was ich erreichen möchte ist folgende:
    Ich habe zwei klassen, die von einander nicht wissen.

    class A
    {
    public:
    ....
    // wie üblich halt
    double gePeriodeA();
    void setPeriodeA(double periodeA);
    private:
    double m_PeriodeA;
    .....
    };
    
    #include "A.h"
    class B
    {
    //Wie üblich
    void machwas();
    
    };
     // cpp von B
     void B ::machwas()
     {
     // hier möchte ich das Value der Methode getPeriodeA() holen
    // dieses Value entspricht das Value was der Methode bei Klass A hat
    // zB. wenn die getPeriodeA()  "in class  A als Value  von 100 liefern ", muss ich hier "in class B bei der Methode machwas() " auch das gleiche Wert liefern.
    // problem: ich weiss es nicht wie ich das machen sollte. 
    
     }
    

    🤡
    Danke in voraus


  • Mod

    MarcelGast schrieb:

    class A
    {
    public:
    ....
    // wie üblich halt
    double gePeriodeA();
    void setPeriodeA(double periodeA);
    private:
    double m_PeriodeA;
    .....
    };
    

    Naja, als üblich würde ich es nicht gerade bezeichnen, eine 1:1:1 Korrespondenz von Getter, Setter und Member zu haben.

    // hier möchte ich das Value der Methode getPeriodeA() holen
    // dieses Value entspricht das Value was der Methode bei Klass A hat
    // zB. wenn die getPeriodeA() "in class A als Value von 100 liefern ", muss ich hier "in class B bei der Methode machwas() " auch das gleiche Wert liefern.
    // problem: ich weiss es nicht wie ich das machen sollte.

    Das ist doch genau das, was passiert. Wo ist das Problem? Was sollte denn sonst passieren? Die Frage ist wohl eigentlich, von welchem A-Objekt du redest, denn ich sehe an der Stelle keines.



  • SeppJ schrieb:

    Das ist doch genau das, was passiert. Wo ist das Problem?

    Ich bekomme einen 0 , wenn ich die methode getPeriodeA() in class B aufrufe.
    ist die void setPeriodeA(double periodeA) in A gesetzt bzw. ist der Member variable "m_PeriodeA" gesetzt ?
    @ ja

    SeppJ schrieb:

    Was sollte denn sonst passieren?

    Der Member variable "m_PeriodeA" ist in A gesetzt
    und genau diesem Wert von "m_PeriodeA" möchte ich in B holen.

    SeppJ schrieb:

    Die Frage ist wohl eigentlich, von welchem A-Objekt du redest, denn ich sehe an der Stelle keines

    A-Objekt ist doch die ganze Klasse A.


  • Mod

    MarcelGast schrieb:

    A-Objekt ist doch die ganze Klasse A.

    Nein, ist es nicht. Und da liegt vermutlich das Problem. Eine Klasse ist eine Beschreibung. Eine Wörterbuchdefinition. Ein Objekt ist eine konkrete Umsetzung, eine Verwirklichung dieser Beschreibung. So wie sich der Lexikonartikel zu "Hund" zu den Objekten auf diesen Bildern verhält. Alle diese Objekte haben gemeinsame Eigenschaften (bei dir: Sie besitzen einen double namens m_PeriodeA und ein paar Funktionen, um auf diesen zuzugreifen), aber bloß weil ein bestimmter Hund braunes Fell hat, haben nicht alle anderen auch braunes Fell.

    Du hantierst aufgrund dieses Missverständnisses anscheinend unwissentlich mit mehreren A-Objekten. Bei einem davon hast du den von dir gewünschten Wert gesetzt, aber dann befragst du ein anderes Objekt nach seinem Wert und wunderst dich zu unrecht, dass dieses einen anderen Wert liefert.



  • SeppJ schrieb:

    MarcelGast schrieb:

    A-Objekt ist doch die ganze Klasse A.

    Nein, ist es nicht. Und da liegt vermutlich das Problem. Eine Klasse ist eine Beschreibung. Eine Wörterbuchdefinition. Ein Objekt ist eine konkrete Umsetzung, eine Verwirklichung dieser Beschreibung. So wie sich der Lexikonartikel zu "Hund" zu den Objekten auf diesen Bildern verhält. Alle diese Objekte haben gemeinsame Eigenschaften (bei dir: Sie besitzen einen double namens m_PeriodeA und ein paar Funktionen, um auf diesen zuzugreifen), aber bloß weil ein bestimmter Hund braunes Fell hat, haben nicht alle anderen auch braunes Fell.

    Deine Beschreibung ist echt Klasse --> Danke



  • Ich komme immer noch nicht zu meine Ziel:
    wenn ich einen Object der Klasse A habe und wollte ich dieses Object in Klasse B holen wie mache ich das?

    Danke



  • Soll A bei B nur mal kurz auf Besuch vorbeischauen oder langfristig einziehen?



  • Swordfish schrieb:

    Soll A bei B nur mal kurz auf Besuch vorbeischauen oder langfristig einziehen?

    A soll B nur mal kurz besuchen.


  • Mod

    MarcelGast schrieb:

    Swordfish schrieb:

    Soll A bei B nur mal kurz auf Besuch vorbeischauen oder langfristig einziehen?

    A soll B nur mal kurz besuchen.

    Dann übergib an B::machwas ein A-Objekt (oder eine Referenz darauf).



  • Was heisst das konkret?
    Kannst du bitte mir einen Beispiel geben ?
    Sorry



  • Hallo

    zB:

    class B {
      public:
        void machwas(const A& a) {
          std::cout << a.getPeriodA();
        }
    }
    

    Mfg Marco


Anmelden zum Antworten