Liste



  • ich habe folgendes problem:
    ich möchte daten in listen speichern und zwar so, dass jedes listenelement eine variable der klasse test1 entspricht und auf die angrenzenden listenelemente verweist.

    in etwa so:

    class test1 {
        private:
            test1 * prev ;
            test1 * next ;
            int value1 ;
    
        public:
            test1 * getprev() ;
            test1 * getnext() ;
    
            int getvalue1() ;
    } ;
    

    jetzt möchte ich diese klasse ableiten:

    class test2 : public test1 {
        private:
            int value2 ;
    
        public:
            int getvalue2() ;
    } ;
    

    und jetzt mein problem: die abgeleitete klasse kommt doch dann nicht mehr mit meinem "listensystem" zurecht oder? weil dieses definiert sich doch aus pointern auf die klasse test1 und nicht test2...

    wie bekomm ich es hin, dass test2 ebenfalls in einer liste darstellbar wird ohne die komplette logik neu zu schreiben?



  • spricht etwas gegen std::list? oder willst du lernen, wie man verkette listen programmiert?



  • wie bau ich denn das std::list da ein? 😞
    hast du vielleicht ein gutes tutorial dafür?





  • vll solltest du erst mal sagen, was du genau machen willst und nicht nur, wie du es dir gedacht hast zu lösen?!

    ansonsten würde das wohl nur über casts gehen ^^

    bb



  • ich möchte eine systemunabhängige klasse erstellen, die je nach vererbung mit verschiedenen anderen variablen erweitert werden. und dabei möchte ich nicht das listensystem neu definieren...

    lassen sich klassen so einfach casten?
    ich werds gleich mal probiern 🙂

    danke euch



  • ich glaube, du brauchst in wirklichkeit templates.



  • daersc schrieb:

    und dabei möchte ich nicht das listensystem neu definieren...

    Eben dafür kannst du ja auch schon bereits implementierte verkettete Listen wie std::list verwenden. 😉

    daersc schrieb:

    lassen sich klassen so einfach casten?

    Mit Polymorphie lässt sich da einiges lösen. Also dass sich hinter einem Zeiger auf eine Basisklasse auch ein Objekt der abgeleiteten Klasse verstecken kann (-> virtuelle Funktionen).



  • daersc schrieb:

    klasse erstellen, die je nach vererbung mit verschiedenen anderen variablen erweitert werden

    Wie meinst du dieses erweitert?
    ich nehm mal an so:

    list0:
       int
    list1:
       int
       char
    list2:
       int
       double
    list1u2:
       int
       char
       double
    

    das löst man in C++ wirklich mit templates:

    #include <list>
    
    struct bsp_inhalt
    {
     int    a1;
     char   a2;
     double a3;
    };
    
    std::list <bsp_inhalt> list1u2;
    

    Ja - die Variablen-Namen sind nicht gerade toll... ^^
    Willst du so etwas nur verwenden oder auch selbst schreiben?

    bb


Anmelden zum Antworten