Zugriff zwischen Klassen



  • N'abend!
    Ich versuche grade, mich mit Objekten&Freunden anzufreunden, habe nun aber das Problem, dass ich von einer Klasse in "ziel.cpp"/"ziel.h" auf ein Element einer in "main.cpp" initialisierten Klasse "quelle" zugreifen muss. Kann ich "quelle" als public definieren, sodass ich vom ziel darauf Zugriff habe? Die Werte in einer Funktion zu übergeben ist unpraktisch, weil es später mal mehrere quellen geben soll und ich sie alle übergeben müsste...
    Wie kann man das Problem lösen?
    Danke,
    JP



  • Hallo,
    könntest du deine Frage vielleicht mit etwas (Pseudo-)Code verdeutlichen? So ist das doch etwas vage. Auf den ersten Blick sieht es so aus, als ob du die Begriffe Objekt und Klasse durcheinander wirfst.



  • Klasse=Struktur?
    Objekt=Instanz der Klasse?
    Wie gesagt, ich steige erst langsam ein.
    Also, da ist die quelle, definiert in quelle.h:

    class source
    {
    public:
    int test;
    
    private:
    
    };
    

    Und dann noch das Ziel (ziel.h):

    class target
    {
    void Funktion();
    }
    

    ziel.cpp:

    void target::Funktion()
    {
    //Irgendwie soll von hier auf int test zugegriffen werden. 
    }
    

    Dann die main.cpp

    source* quelle;
    target* ziel;
    
    ...
    quelle=new source;
    ziel=new target;
    ziel->Funktion();
    

    Ich hoffe, es macht die Frage verständlicher.



  • Hallo,
    in einer solchen Situation ist das naheligenste und meist sinnvollste die Verwendung eines Funktionsparameters. Sprich: du übergibst das Objekt, auf das eine andere Funktion zugreifen soll, einfach an genau diese Funktion.



  • OK, ist recht simpel, aber ich finde es unangenehm, 20 Parameter zu übergeben.
    Gibt es grundsätzlich noch andere Optionen?
    Vielen Dank für die Antworten!
    JP



  • JP schrieb:

    Gibt es grundsätzlich noch andere Optionen?

    Ja, z.B. globale Variablen. (Deine nächste Frage sollte sein wie unangenehm das wird...)



  • JP schrieb:

    OK, ist recht simpel, aber ich finde es unangenehm, 20 Parameter zu übergeben.
    Gibt es grundsätzlich noch andere Optionen?
    Vielen Dank für die Antworten!
    JP

    Ja, es gar nicht erst machen. Der Grundgedanke von OOP besteht darin, Daten (sprich variablen) mit den benötigten Funktionen in einer Klasse zu "kapseln".

    Natürlich ist es immer mal nötig das Informationen aus der Klasse heraus oder in sie hineinmüssen, aber wenn, wie Du sagst, eine Klasse B dauerhaft auf variablen der klasse A zugrifen muß, dann ist dein Klassendesign mit Sicherheit falsch.

    Variablen sollten in der regel private sein und nur von funktionen der Klasse selbnst modifizert werden können. Wenn Datenaustausch mit anderen Klassen nötig ist, sollte der nur über Funktionen passieren und idealerweise nur über ein klar definiertes Interface stattfinden.

    Was Du beschreibst hört sich mehr nache eine stinknormalen C-programmierstil an der halt nur "in Klassen versteckt wird". ProggerRegel: Eine Class macht noch lange kein OOP.



  • Du könntest auch noch die friend-Deklaration nutzen.


Anmelden zum Antworten