Getter und Setter Anwendung
-
Du hast möglicherweise 'husbaer' nicht richtig verstanden, der Code läuft ja so auch nicht!
Aber trotzdem ein Versuch; der Wert 'm_periodeA' in Objekt 'a' (Klasse A) wird ausschließlich in Methode A::setPeriodeA(double Periode) gesetzt (auf 34.6).
Wo wird diese Methode aufgerufen?
Außerdem ist die Methode "GetRelativeSDDevPeriode()" in A nicht vorhanden.
-
//a.h class A { public: // A(); brauchst du nicht // ~A(); brauchst du nicht double getPeriodeA(){ return m_periodeA;} //semikolon fehlte, rückgabewert double // void setPeriodeA(double Periode){ m_periodeA = Periode = 34.6 ;} //das macht keinen sinn. //entweder: void setPeriodeA() {m_periodeA = 34.6;} //oder void setPeriodeA(double Periode = 34.6) { m_periodeA = Periode; } //vermutlich aber: void setPeriodeA(double Periode) { m_periodeA = Periode; } private: double m_periodeA; };
//a.cpp #include "A.h" /* brauchst du nicht A::A(void) {} A::~A(void) {} */
-> brauchst du gar nicht.
---
//b.h #pragma once //#include "A.h" - brauchst du hier (noch) nicht class B { public: // B(); - brauchst du nicht // ~B(); - brauchst du nicht void auswertung(); };
//b.cpp #include "b.h" #include "a.h" //hier musst du es dann includieren #include<iostream> using namespace std; /* brauchst du nicht B::B(void) {} B::~B(void) {} */ void B::auswertung() { A a; //SO> a.setPeriodeA(34.6); //<SO // if(a.GetRelativeSDDevPeriode()>0) if(a.gerPeriodeA() > 0.) { cout << "blabala " << endl; } // mir geht es darum: wie ich die WertValue der getPeriodeA() zugreifen kann }
//main.cpp #include "b.h" int main() { B b; b.auswertung(); getchar(); }
bei der nächsten frage, achte bitte darauf, dass wenigstens die code-schnipsel zusammen passen...
bb
-
void B::auswertung() { A a; //SO> a.setPeriodeA(34.6); //<SO // if(a.GetRelativeSDDevPeriode()>0) if(a.getPeriodeA() > 0.) { cout << "blabala " << endl; } // mir geht es darum: wie ich die WertValue der getPeriodeA() zugreifen kann }
//SO>
a.setPeriodeA(34.6);
//<SO
Diesem wert habe ich aber nicht bei class B und genau diesem Value wollte ich von dergetPeriodeA()
in class A holen.
Ist das möglich?
-
Nochmal: mach ein vollständiges compilierbares Beispiel. Möglichst mit korrekter Einrückung. Deine Codeschnipsel enthalten Syntaxfehler. Die zeigt Dir Dein Compiler bereits an. Wenn Du die korrigierst hast, dann zeige und den Code. Achte darauf, dass der Code zumindest mal syntaktisch korrekt ist. Und rufe keine Methoden auf, die es nicht gibt. Und kommentiere diese Aufrufe nicht aus sondern lass sie einfach weg, wenn sie für die Problembeschreibung nicht relevant sind (
a.GetRelativeSDDevPeriode()
).Ich wundere mich wieder über die Bereitschaft Dir zu helfen, obwohl Du die Frage noch nicht mal korrekt stellst.
P.S: ach ja - und korrekte Einrückung erhöht die Lesbarkeit und hilft uns bei der Fehlersuche.
-
So hier noch mal:
class A:#pragma once class A { public: A(); ~A(); double getAperideA() { return m_Aperiode ; }; void setAperiodeA(double a) { m_Aperiode = 9; } double m_Aperiode; };
Class B :
#pragma once class B { public: B(); ~B(); void auswertung(); };
cpp File von class B
#include "stdafx.h" #include "B.h" #include "A.h" #include<iostream> using namespace std; B::B(){} B::~B(){} void B::auswertung() { A a; int i = 0; a.setAperiodeA(a.m_Aperiode); if (a.getAperideA() > 0) { cout << " blabla" << endl; } }
main methode
#include "stdafx.h" #include "B.h" int _tmain(int argc, _TCHAR* argv[]) { B b; b.auswertung(); getchar(); return 0; }
In diesem Beispiel geht es wie oben gesagt wurde und der Value von "m_Aperiode" in class A.
Es ist unschön wie ich jetzt gemacht habe, da fragt man sich wofür sind die denn Getter und Setter.
-
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
-
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 ?
@ jaSeppJ 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.
-
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
beiB
nur mal kurz auf Besuch vorbeischauen oder langfristig einziehen?
-
Swordfish schrieb:
Soll
A
beiB
nur mal kurz auf Besuch vorbeischauen oder langfristig einziehen?A soll B nur mal kurz besuchen.
-
MarcelGast schrieb:
Swordfish schrieb:
Soll
A
beiB
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