Get Methode für eine Liste?



  • Hallo Forum,

    eine Klasse ermittelt bestimmte Werte und schreibt sie in eine Liste. Wie würde man diese Liste an andere Klassen weitergeben? Die Liste einfach zu einer Public Variablen zu machen scheint verpönt zu sein. Wie macht man nun eine Get Funktion für eine Liste?
    Pro Methodenaufruf ein Listenelement zurückzugeben ist mir etwas zu blöd...

    Vielen Dank



  • übergebe einfach einen zeiger auf das list<T>-objekt...

    class myClass1{
    
     friend class myClass2;
    
     private:
        list<whatever> myList; //deine liste
        list<whatever>* getListPointer(){
            return &myList;
        }
    };
    
    class myClass2{
     /* iregendeine funktion */
     list<whatever>* pList= c1.getListPointer(); //c1=objekt vom typ myClass1
    };
    

    wenn du als friends nur die klassen deklarierst, die zugriff auf die list haben dürfen, dann wird es auch nicht vorkommen, dass irgendjemand ohne befugnis irgendwas in deiner liste ändert.



  • Dann kann doch die private Liste verändert werden. Die Werte der Liste sollen von jedem einsehbar sein der meine Klasse instanziieren kann... aber nicht verändert werden.



  • Dann kann doch die private Liste verändert werden.

    "private" ist ja dazu da, damit die liste veränderbar bleibt, aber damit eben nicht jeder zugriff darauf hat.
    wenn sie auch noch von anderen nicht veränderbar sein soll, dann muss die funktion "const list<whatever>*" oder evtl auch "const list<whatever>&" zurückgeben. In deinem fall ist die lösung mit der konstanten referenz wahrscheinlich sogar praktischer.

    edit: dann brauchst du die funktion auch nicht privat zu machen, dann ersparst du dir die ganzen friend-deklarationen. "Solang keiner was kaputtmacht... sollen die doch gugn" nach dem motto ungefähr :p



  • ZubX schrieb:

    Hallo Forum,

    eine Klasse ermittelt bestimmte Werte und schreibt sie in eine Liste. Wie würde man diese Liste an andere Klassen weitergeben? Die Liste einfach zu einer Public Variablen zu machen scheint verpönt zu sein. Wie macht man nun eine Get Funktion für eine Liste?
    Pro Methodenaufruf ein Listenelement zurückzugeben ist mir etwas zu blöd...

    naja, dein Grundgedanke ist schon mal nicht schlecht. Aber dir bleibt nichts anderes übrig, als die Methoden nochmal zu kapseln. Aber zaubern geht halt nicht. Was du doof findest, ist manchmal auch irrelevant. Was ist dir denn zu doof? Die Schreibarbeit? Das sollte kein Argument sein, für eine Designentscheidung.



  • Wenn ich einen const Zeiger auf die Liste zurückgebe kann der Benutzer meiner Klasse die Liste nur verändern wenn er das const wegnimmt (const_cast). Wenn es nun zu einem Fehler kommt liegt der Fehler klar bei ihm, weil er die A) Regeln der Liste nicht eingehalten hat und 😎 weil er es gar nicht wegen des const durfte.

    So bin ich aus dem Schneider. Die Liste Item für Item nach draußen zu geben wäre wohl ein bißchen überdeminsioniert und langsam.


Anmelden zum Antworten