Go Down

Topic: eigene Klasse an andere übergeben (Read 196 times) previous topic - next topic

Pfanne

Moin,

ich hoffe ich bekomme meine Frage einigermaßen verständlich formuliert.....


Ich habe eine Klasse API() in dieser Klasse gibt mehrere andere Klassen:
Code: [Select]
class API{
public:
  API();
//classes
  SysUtils sysUtils;
  FFS ffs;
  WIFI wifi;
  MQTT mqtt;
  WEBIF webif;
  I2C i2c;
  OWIRE oWire;


Damit die z.B. die Klasse ffs auch auch die Klasse sysUtils zugreifen kann übergebe ich im api.constuctor eine Referenz der Klasse sysUtils an die Klasse ffs:
Code: [Select]

API::API():
    ffs(sysUtils),
    mqtt(sysUtils, wifi),
    wifi(sysUtils),
    webif(sysUtils){


so weit so gut....

Ist es auch möglich eine Referenz der eigenen Klasse API an eine andere Klasse weiterzugeben?
Code: [Select]

API::API():
    ffs(sysUtils, api),


Oder müsste ich dafür eine weitere übergeordnete Klasse anlegen die diese Aufgabe übernimmt?


Gruß
Pf@nne

Whandall

#1
Jul 16, 2017, 08:42 am Last Edit: Jul 16, 2017, 08:44 am by Whandall
Ein Beispiel (falls ich dich richtig verstanden habe)

Code: [Select]
class Master;

class Slave {
    Master& up;
  public:
    Slave(Master& in) : up(in) {}
};

class Master {
    Slave obj;
  public:
    Master() : obj(*this) {}
} TestObj;

void setup() {}
void loop() {}
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Whandall

Noch eine Bemerkung: die Sequenz
Code: [Select]

API::API():
    ffs(sysUtils),
    mqtt(sysUtils, wifi),
    wifi(sysUtils),
    webif(sysUtils){

erscheint mir strukturell überkompliziert, aber ohne den ganzen Kode kann ich nur mutmaßen.

Wenn es genau eine sysUtils Instanz gibt, kann man deren Verweis besser in einem static SysUtils * parken,
wenn niemand sonst das benutzen können soll, mach ein protected Feld einer gemeinsamen Oberklasse daraus.
Den Verweis sysUtils an vielen Stellen abzuspeichern ist nicht nötig und in jeder Hinsicht kontraproduktiv.
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Pfanne

#3
Jul 16, 2017, 09:05 am Last Edit: Jul 16, 2017, 09:12 am by Pfanne
Moin,

der gesamte Code liegt hier:
https://github.com/Pfannex/ADE7953-PowerSocket/tree/apidevelopment/src

Dein Beispiel muss ich mir genauer ansehen.

Quote
Wenn es genau eine sysUtils Instanz gibt, kann man deren Verweis besser in einem static SysUtils * parken,
wenn niemand sonst das benutzen können soll, mach ein protected Feld einer gemeinsamen Oberklasse daraus.
Den Verweis sysUtils an vielen Stellen abzuspeichern ist nicht nötig und in jeder Hinsicht kontraproduktiv.
Kannst du das noch ein wenig ausführen?
wie kommt denn z.B. die Klasse ffs an den Verweis zu SysUtils?

Pfanne

Ich kann ja mal beschreiben was ich eigentlich vorhabe:

Ich möchte in meinem Sketch diverse Funktionen implementieren.
Z.B. WiFi, FFS, MQTT usw....

Alle Funktionen sollen zentral über ein API erreicht werden können.
So soll z.B. MQTT genauso wie das WebIF auf dieses API zugreifen.
Später kommt dann ggf. nch UDP oder TCP hinzu.

Auch sollen die internen Klassen untereinander (sofern notwendig) über das API zugriff haben.
Dmit kann dann z.B. MQTT über das API auch etwas auch dem I2C-LCD-Display ausgben.

Ist das soweit verständlich?

Whandall

Tut mir leid, bei closed source / copyright beteilige ich mich nur als Angestellter.

Code: [Select]
/******************************************************************************

  ProjectName: Basic template                     ***** *****
  SubTitle   : WLAN/LAN/MQTT/WebIf,LCD           *     *     ************
                                                *   **   **   *           *
  Copyright by Pf@nne                          *   *   *   *   *   ****    *
                                               *   *       *   *   *   *   *
  Last modification by:                        *   *       *   *   ****    *
  - Pf@nne (pf@nne-mail.de)                     *   *     *****           *
                                                 *   *        *   *******
  Date    : 13.11.2016                            *****      *   *
  Version : alpha 0.312                                     *   *
  Revison :                                                *****

********************************************************************************/
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Serenifly

wie kommt denn z.B. die Klasse ffs an den Verweis zu SysUtils?
Vererbung. Das sollte dir eigentlich inzwischen bekannt sein.

Pfanne

Quote
Tut mir leid, bei closed source / copyright beteilige ich mich nur als Angestellter.
Das Copyright verschwindet noch! Das ganze wird ein openSource-Template für den ESP8266, quasi als Starterpaket für alle Basisanwendungen.

Ziel ist es, dass die Klassen als MVC-Muster "zusammengesteckt" werden.
https://de.wikipedia.org/wiki/Model_View_Controller
 

Da ich nicht zu 100% (eher 25%) in der C++ Programmierung stecke, hören sich meine Fragen sicher sehr merkwürdig an. Wenn ich aber die Frage genau formulieren könnte, dann könnte ich die meisten Sachen auch googeln.
Da ich meisten nur irgendwelche wirren Vorstellungen habe ist es manchmal schwer mit mir, daher an dieser Stelle vielen Dank für eure Geduld!

Ich muss mich in das MVC-Muster noch ein wenig einlesen.....

Gruß
Pf@nne

Go Up