Klassen miteinander verknüpfen



  • Hi,

    ich habe immer wieder mal das prob, Klassen miteinander zu verknüpfen, finde im Inet aber immer nur rudimentäre Klassen.

    Sagen wir mal wir haben eine Klasse Lager und eine Klasse Fahrzeuge.
    Lager besteht aus verschiedenen Lager-Typen, genauso wie Fahrzeuge aus verschiedenen Fahrzeug-Typen besteht.

    Nun soll Lager die Klasse Produkte(ebenso wie Fahrzeuge) aufnehmen können. Aber eben nur bestimmte Produkte.

    Wie setze ich nun die Klasse Lager auf damit sie verschiedene Produkte aufnehmen kann, und eben andere Produkte ablehnt?

    thx im voraus



  • Hi!

    Das dürfte recht einfach zu bewerkstelligen sein. Da baust die Klasse Lager so, dass du eine Methode hinzufügen kannst, welche prüft, ob das Auto dazugehört oder nicht. Falls sie dazu gehört, wird sie in einem vektor Lager hinzugefügt.

    Z.B.

    #include <iostream>
    #include <vector>
    #include <auto.h>
    
    using namespace std;
    
    class EineKlasse
    {
      public:                              
        Lager();                      
    
        ~Lager();                    
    
        void autoHinzufügen(Auto car);         
    
      private:                     
        vector <Auto> Lager1;                    
        vector <Auto> Lager2;
    };
    

    Grüße!



  • struct ABF_Lager{
        //kann nur AProdukte, BProdukte und Fahrzeuge aufnehmen
        vector<AProdukt> aProdukt;
        vector<BProdukt> bProdukt;
        vector<Farhzeug> fahrzeuge;
    };
    

    Erklär mal genauer was die Anforderungen sind. Benutzt du Vererbung um alles in einen vector zu stopfen?



  • Neija,

    ich merk schon, wird immer komplexer;-)

    Jetzt soll Lager aber aus mehreren Unterlagern bestehen. Sprich Lager ist voll, also wird neues Lager gekauft. Das Lager könnte eine Scheune sein, die z.B. Gras oder Heu aufnimmt, könnte aber auch ein Silo sein das Weizen aufnimmt.

    Vom Prinzip her habe ich mit Fahrzeugen das selbe Prob, Der eine Transporter kann Weizen transportieren, der andere gekühltes.

    Edit: Vererbung mom. noch nicht, aber am liebsten alles in eine Klasse(z.B. Klasse_Lager enthält alle LagerTypen)



  • hi!

    Dann mach doch einen 2d vector draus

    vector<vector<Irgendwas>> Lager;
    


  • template<class Itemtype, size_t maxsize>
    struct Lager{
        void push(const Itemtype &item){
            if (v.size() < maxsize)
                v.push_back(item);
            else
                throw runtime_error("Too many elements");
        }
        private:
        vector<Itemtype> v;
    };
    
    int main(){
        Lager<Fahrzeug, 5> fl;
    }
    

    Dann noch eine Variante für 2 und 3 Typen machen (geht einfach) oder mit variadic templates spielen, damit man beliebig viele Typen angeben kann (ist schwer). Eine Menge von Lagern könnte man per tuple zusammenfassen.

    tuple<Lager<Heu, 7, Stroh, 5>, Lager<Lager<Fahrzeuge, 5>, 3>> meineLager;
    

Log in to reply