URL: https://www.overclockers.at/coding-stuff/c-member-acces-to-other-members-of-parent_250891/page_1 - zur Vollversion wechseln!
ich habe eine klasse (wetterstation) die mehrere andere klassen (sensoren) als member enthält. die sensor-klassen haben ein einheitliches interface und sind komplett unabhängig voneinander. sie werden einmal konfiguriert und werden danach nur noch gelesen.
in diesem beispiel lässt sich der taupunkt aus der temperatur und luftfeuchtigkeit berechnen. wie verschaffe ich dem objekt sensor_dew_point_ zugriff auf die anderen beiden sensoren? ich könnte dem taupunktsensor referenzen auf die anderen beiden sensoren mitgeben, was aber imho bestenfalls fragwürdig ist, oder eine referenz auf das ObservingConditions objekt, was mir aber auch nicht so recht gefallen mag. das YAAASensor interface will ich nicht ändern und den einen sensor auch nicht anders behandeln als alle anderen (also keine zusätzlichen funktionen).Code: CPPclass ObservingConditions { [...] private: YAAASensor *sensor_dew_point_; YAAASensor *sensor_humidity_; YAAASensor *sensor_temperature_; }; class YAAASensor { public: [...] virtual bool begin() = 0; virtual bool measure() = 0; virtual bool hasValue() = 0; virtual float getValue() = 0; };
Einen back pointer auf parent koenntest du schon im Interface definieren, das ist nicht perfekt aber dennoch eine recht gaengige practice.
https://softwareengineering.stackex...he-parent-class
Vielleicht überseh ich grad was, aber warum machst du die Berechnung nicht einfach in der Klasse ObservingConditions? Dort hast du Zugriff auf alle Sensoren.
Und was ich nicht ganz check: Warum gibt es einen eigenen Sensor für den Taupunkt, wenn er aus den Daten der anderen beiden Sensoren berechnet wird?
Zitat aus einem Post von tinkerVielleicht überseh ich grad was, aber warum machst du die Berechnung nicht einfach in der Klasse ObservingConditions? Dort hast du Zugriff auf alle Sensoren.
Und was ich nicht ganz check: Warum gibt es einen eigenen Sensor für den Taupunkt, wenn er aus den Daten der anderen beiden Sensoren berechnet wird?
Zitat aus einem Post von wergorin diesem beispiel lässt sich der taupunkt aus der temperatur und luftfeuchtigkeit berechnen.
Zitat aus einem Post von wergorwie verschaffe ich dem objekt sensor_dew_point_ zugriff auf die anderen beiden sensoren? ich könnte dem taupunktsensor referenzen auf die anderen beiden sensoren mitgeben, was aber imho bestenfalls fragwürdig ist, oder eine referenz auf das ObservingConditions objekt, was mir aber auch nicht so recht gefallen mag.
die idee dahinter ist, dass ich stattdessen einen physischen taupunktsensor verwenden könnte, dann müsste ich nur ein anderes objekt instanzieren und mich um sonst nichts kümmern.Zitat aus einem Post von tinkerUnd was ich nicht ganz check: Warum gibt es einen eigenen Sensor für den Taupunkt, wenn er aus den Daten der anderen beiden Sensoren berechnet wird?
Ist imho eine legitime Idee und damit ein klasssiches Dependency Injection Problem. Ich würde das YAAASensor Interface um eine Variante erweitern, die die beiden anderen Sensoren im Konstruktur schluckt.
Code: C++class YAAASensorMock : public YAAASensor { YAAASensorMock(YAAASensor* hs, YAAASensor* ts) : hs{hs}, ts{ts} {} virtual bool hasValue() final { ... }; private: YAAASensor* hs; // humidity YAAASensor* ts; // temperature };
ich werde die berechnung in der ObservingConditions klasse implementieren, ist die saubere lösung (glaube ich).
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025