Klasse, welche sich selber als Member hat



  • Moin Moin,

    ich würde gerne Klasse für die Lagerartikel um eine Stücklistenfunktion ergänzen. Stark vereinfacht sieht die Klasse so aus :

    class Item
    {
    private:
    	std::string m_ItemNumber;
    	double m_Purchase;
    	double m_Sale;
    
    public:
    	Item();
    	~Item();
    };
    

    Meine Gedanken sind nun folgende. Ich füge in dieser Klasse noch einen Vector hinzu :

    std::vector<Item> m_ItemList;
    

    Wenn jetzt der Artikel geladen wird, dann die Liste enstsprechend mitgefüllt und der Ein- und Verkauf errechnen sich anhand der Stückliste.
    Ich wollte es vermeiden eine neue Klasse für die Stücklistenartikel zu schreiben, da es sich ja um identische Klassen handeln würde. Ist mein Lösungsansatz so in Ordnung und unterstützt C++ sowas überhaupt ?

    Viele Grüße



  • Also aus meiner Sicht unterscheidet sich ein Grund-Item (Schraube oder Kondensator) durchaus von einem zusammengesetzten Artikel (Computer) - und wenn nur in der Art, wie der jeweilige Verkaufspreis ermittelt wird.

    *kurz nachdenkt* Vermutlich dürfte das Composite-Muster das liefern, was du benötigst.



  • Das Problem ist, dass der Anwender selber entscheiden kann, ob sich der Verkaufspreis anhand der Stückliste errechnen soll oder nicht. Somit kann der Artikel, obwohl er eine Stückliste hat, auch einen festen Verkaufswert haben.

    Diese Option würde ich generell als Member des Artikel aufnehmen und jetzt geht es nur darum die einzelnen Artikel (im Artikel) aufzunehmen.

    Ich werde mir das Composite-Muster mal ansehen. Vielen Dank für diesen Vorschlag.



  • Es ist einer Klasse nicht möglich sich selbst als member zu haben. Das würde zu einer endlosschleife beim Konstruktor führen. Aber es ist möglich einen Pointer auf ein Objekt der selben Klasse zu verwenden. Aber generell ist es besser, wenn du die Liste zur verwaltung der Objekte in eine eigenen Klasse packst, das ist übersichtlicher und in meinen Augen auch sinnvoller. Das Liste in der Klasse selbst anzulegen hab ich auch schon mal versucht, hat bei mir aber zu sehr vielen komplikationen geführt.


Anmelden zum Antworten