Class constructor mit weniger Paremtern



  • ich komme von Delphi und würde in der abgeleiteten Klasse im Construktur vor dem Inherited den Wert A berechnen und mitgeben. Das geht in C++ sicher auch, aber ich weiss nicht wie die korrekte Syntax aussieht.

    ich habe folgende Klasse

    class TA { 
      public:
        TA(int i) {
          Serial.printf("TA %d", i);
        }
    };
    

    welche ich ableiten möchten und im constructor den Parameter i berechnen und Basis TA mit dem constructor mitgeben

    class TB: public TA {
      private:
      public:
        TB(): TA(???) {
        }
    };
    

    Herzlichen Danke für einen Hinweis


  • Mod

    Das ??? kann sein, was immer du möchtest. Das können wir nicht wissen, was du willst.



  • Deine Klasse TA erwartet einen "int" als Konstruktorparameter. Im Konstruktoraufruf von TB müsstest du dann logischerweise den Konstruktor von TA auch genauso aufrufen.

    TB::TB() :
       TA( calcMyInt() )
    {
    }
    

    Wenn du keine Möglichkeit hast, den INT zeitnah zu bestimmen, musst du ihn entweder in TB bereits übergeben:

    TB::TB( int param_for_TA ) :
       TA( param_for_TA  )
    {}
    

    oder ihn nachträglich, also nicht im Konstruktor, setzen.



  • Besten Dank für euren Input.
    Ich habe mein Anliegen zuwenig verständlich beschrieben. Ich versuche es folgendermassen.

    Ich habe eine Basiskasse mit folgendem Constructor:

    BasisClass (char* ID, DNSServer* dnsServer);
    

    Das ist ein fremde Klasse, welche ich nicht abändern sondern ableiten möchte. Die in der Basisklasse benötigten Parameter ID und dnsServer möchte ich in MyClass definieren und dem Basis Constructor übergeben.

    class MyClass: public BasisClass {
      private:
        DNSServer* dnsServer;
        char* ID;
      public:
        MyClass(): BasisClass () {xy; }
    };
    

    Nach meinem Verständnis ist im CodePart die BasisClass schon erstellt. Wie kann ich dnsServer vor Erstellen von BasisClass erstellen und übergeben?
    In Delphi mache ich das folgendermassen:

    constructor Create;
    begin
      ID = "blabla";
      dsnServer = ...
      inherited Create ( ID, dnsServer);
    end;
    

    Ich hoffe das ist jetzt verständlicher.


  • Mod

    Inwiefern helfen unsere Antworten nicht? Sie erklären buchstäblich genau, wie das geht.

    MyClass(): BasisClass ("blabla", ...) {}
    


  • Besten Dank, das funktioniert sogar.

    #include <DNSServer.h>
    
    class BasisClass {
      private:
        DNSServer* fDNSServer = NULL;
      public:
        BasisClass(DNSServer* dnsServer) {fDNSServer=dnsServer;}
        void Print() { Serial.println(fDNSServer!=NULL ? "created" : "not created"); }
    };
    
    class MyClass: public BasisClass {
      private:
        DNSServer dnsServer;
      public:
        MyClass(): BasisClass(&dnsServer) {}  
    };
    
    void setup() {
      Serial.begin(115200);
      Serial.println();
    
      MyClass* _class = new MyClass();
      _class->Print();
      delete _class;
    
    }
    
    void loop() {
    }
    


  • @Tefi sagte in Class constructor mit weniger Paremtern:

    MyClass* _class = new MyClass();
    

    new. Warum zum Teufel new?


Anmelden zum Antworten