Zugriff auf Methoden anderer Klassen [gelöst]



  • Nabend, ich hätte eine Frage bezüglich des Zugriffs einer Klasse auf die Methoden samt Member einer anderen Klasse.

    Klasse LEVEL

    class LEVEL
    {
    public:
    	LEVEL();
    	~LEVEL();
    
    	int LevelDraw();
    	int getMauer(short x, short y);
    
    private:
    
    	COORD coordl;
    
    	int xl;
    	int yl;
    	int level[120][25] = { 0 };
    };
    

    Klasse PLAYER

    class PLAYER
    {
    public:
    	PLAYER();
    	~PLAYER();
    
    	void PlayerMove();
    	void PlayerDraw();
    	
    private:
    	int leben = 100;
    	int kraft = 0;
    	int erfahrung = 0;
    	int score = 0;
    
    	COORD pkoord;
    };
    

    Wie kann ich nun in/aus der Klasse PLAYER auf die Methode "getMauer…" der Klasse LEVEL zugreifen? Ich habe was bzgl. FRIEND-Funktionen/-Methoden gelesen, nur das würde die Datenkapselung ja aufheben, was wiederum vermieden werden sollte, oder?!

    Danke für die Hilfe!


  • Mod

    Die wahre Frage ist: getMauer von welchem Level? Wenn du das beantworten kannst, dann ist auch deine eigentliche Frage ganz leicht zu beantworten: Einfach aufrufen!

    Das andere wahre Problem: Du behandelst deine Klassen nicht so als wären sie Prototypen für Objekte, sondern so als wären sie selber Objekte. Was sie aber nicht sind. Daher fällt dir auch meine obige Gegenfrage sicherlich schwer. Du solltest noch einmal zwei Schritte zurück machen und wiederholen, was und wozu Klassen überhaupt gut sind.



  • Ich glaube ich weiß was Du mir sagen willst, und stimmt auch, die Frage ist etwas abstrakt in diesem Kontext. Meine Klassen-Architektur ist sicherlich auch nicht vorbildlich

    Ich erstelle die Objekte PLAYER und LEVEL in der main-Funktion. Hier habe ich es etwas einfach dargestellt. Im Programm gebe ich den Objekten über den Konstruktor gewisse Werte für die Eigenschaften mit. Über die Main-Funktion kann ich alle Objekte ansprechen, auch die Methoden und somit die Eigenschaften ändern.

    Wie gehe ich aber nun vor, wenn ich klassenübergreifend Methoden aufrufen möchte, falls das überhaupt möglich ist. Da war auch das Problem was Du als erstes gleich angesprochen hast - das Objekt, was die Klasse LEVEL erzeugt hat, in der PLAYER.cpp natürlich nicht bekannt ist. Woher soll das Objekt der Klasse PLAYER auch das Objekt der Klasse LEVEL kennen oder drauf zugreifen können …

    Kurz um: Problem verstanden 🙂 - danke schön!!



  • @Kloeterkong sagte in Zugriff auf Methoden anderer Klassen:

    das Objekt, was die Klasse LEVEL erzeugt hat, in der PLAYER.cpp natürlich nicht bekannt ist. Woher soll das Objekt der Klasse PLAYER auch das Objekt der Klasse LEVEL kennen oder drauf zugreifen können

    Wie wäre es, wenn das Object dem Player dann den Level bekannt macht? Genauso wie du ihm ja auch andere Eigenschaften schon gibst.



  • Hallo, ja - so habe ich mir das im Grunde auch vorgestellt, nur fehlt mir da noch eine Art Ansatz oder Idee wie ich das machen kann 😕 ...



  • Hallo, ich habe glaube die Lösung. Ich versuche es mit einer Referenz auf das bzw. ein Objekt LEVEL, so dass ich darüber Zugriff darauf bekomme.



  • Hallo, nach langem Lektüre- und Forenblättern habe ich die Lösung gefunden. Dem erstelltem Objekt der Klasse LEVEL weise ich eine Referenz zu und gebe diese dem erstelltem Objekt der Klasse PLAYER bei einem Methodenaufruf mit auf dem Weg.

    Leider bin ich mit der Referenz-Behandlung noch nicht so firm (gerade im Umgang mit Klassenobjekten), so dass ich hier keinen Code reinstellen möchte, der nachher unterirdicsch schlecht ist, weil Anfänger 🙂 ... als gelöst sehe ich es trotzdem für mich an, daher die Topic-Änderung.

    Auch hier ein Danke an ALLE!!!


Log in to reply