Klasse mit Konstruktor in Klasse verwenden



  • Hallo zusammen 🙂

    Ich befinde mich gerade in einer Situation die ich so noch nicht hatte. Ich habe eine Klasse mit Konstrukor. Zum Beispiel Numbers(1,3,5,7). Nun möchte ich die Numbers in einer neuen Klasse nutzen. Dort kann ich ja die Parameter nicht mit übergeben (außer in einer Methode). Setter für die Parameter bietet mir die Numbers-Klasse nicht. Wie kann ich also nun ein Numbers-Objekt in meiner Klasse erstellen?

    Hier nochmal das Ganze in Code verpackt:

    Numbers myNumbers(1,3,5,7); //So erstelle ich eigentlich ein Numbers-Objekt
    
    class MyClass {
    
    public:
    	//...
    
    private:
    	//...
    	Numbers myNumbers(1,3,5,7); //So kann ich das Objekt nicht erstellen, da ich keine Parameter übergeben kann
    };
    

    Ich denke ihr versteht was ich meine 🙂



  • Meinst du so etwas?

    class MyClass {
    public:
        MyClass()
        : myNumbers(1,3,5,7)
        {
    
        }
    	//...
    
    private:
    	//...
    	Numbers myNumbers;
    };
    




  • Wow, da stand ich gerade echt auf dem Schlauch. Ich verwende sonst bei Klassen Initialisierungslisten um beim Konstruktor die Parameter mit zu übergeben. Aber auf die Idee bin ich irgendwie nicht gekommen, obwohl es ja eigentlich auch nichts anderes ist. Thx 😅



  • class MyClass {
    
    public:
    	//...
    
    private:
    	//...
    	Numbers myNumbers = Numbers(1,3,5,7); 
    };
    

    sollte mit einem aktuellen Compiler mit C++17 auch funktionieren.



  • Vielen Dank. Das hab ich so noch nicht gesehen Manni. Komm immernoch nicht drüber hinweg, dass ich nicht auf die Idee gekommen bin die Initialisierungsliste so zu verwenden 🙂



  • @Zhavok sagte in Klasse mit Konstruktor in Klasse verwenden:

    Hallo zusammen 🙂

    Ich befinde mich gerade in einer Situation die ich so noch nicht hatte. Ich habe eine Klasse mit Konstrukor. Zum Beispiel Numbers(1,3,5,7). Nun möchte ich die Numbers in einer neuen Klasse nutzen. Dort kann ich ja die Parameter nicht mit übergeben (außer in einer Methode). Setter für die Parameter bietet mir die Numbers-Klasse nicht. Wie kann ich also nun ein Numbers-Objekt in meiner Klasse erstellen?

    Hier nochmal das Ganze in Code verpackt:

    Numbers myNumbers(1,3,5,7); //So erstelle ich eigentlich ein Numbers-Objekt
    
    class MyClass {
    
    public:
    	//...
    
    private:
    	//...
    	Numbers myNumbers(1,3,5,7); //So kann ich das Objekt nicht erstellen, da ich keine Parameter übergeben kann
    };
    

    Ich denke ihr versteht was ich meine 🙂

    class MyClass { 
    private:
     	Numbers myNumbers{1,3,5,7};
    };
    

    So geht's auch 😉

    Generell ist die Initialisierungsliste da eher die Lösung prior c++11. Mit c++11 kann man obiges durchführen, was prinzipiell zu bevorzugen ist, da dies eben direkt für alle CTor-Überladungen gilt und man nicht über etwaiges chaining nachdenken muss.

    Btw, deine Lösung sieht für den Compiler wie eine Funktionsdeklaration aus; und deswegen kannst du das so nicht machen.

    PS: Es sei noch angemerkt, dass es manchmal Unterschiede zwischen Foo(1, 2, 3) und Foo{1,2,3} geben kann. Als Beispiel sei hier mal auf std::vector{1,2} vs std::vector(1,2) verwiesen.