Alle Membervariablen als Parameter im Constructor ausgeben - geht das?



  • Hallo,

    ich habe vor 3 Tagen mal richtig mit dem Lernen der C++-Programmierung begonnen und bin jetzt bei den Klassen angelangt. Ich schreibe mir ein ziemlich sinnloses Programm zur Übung und bin auf die Idee gekommen, alle Membervariablen in einer Funktion im Constructor auszugeben, um direkt zu prüfen, ob sich das Objekt innerhalb eines Intervalls befindet.

    Natürlich könnte ich auch alle Variablen einzeln übergeben, aber ich kann mit vorstellen, dass es bei vielen Variablen recht umständlich wird und es für C++ auch eine bessere Lösung gibt. Könntet ihr mir diese eventuell nennen? 🙂

    Also hier die relevanten Stellen:

    class Cplayer
    {
    private:	
    	int m_power;
    	int m_points;
    	int m_energy;
    	int m_posX;
    	int m_posY;	
    
    public:	
    	Cplayer(int posX, int posY);
    	Cplayer();
    	void isInMap(Cplayer coordinates);
    	void showStats();	
    };
    
    Cplayer::Cplayer(int posX, int posY)
    {
    	m_power = 100;
    	m_points = 0;
    	m_energy = 200;
    	m_posX = posX;
    	m_posY = posY;
    	isInMap();        <-- kann ich hier die Klasse als Parameter übergeben,
    }                         sodass ich in der Funktion z.B. nur noch coordinates.m_posY prüfen müsste?
    

    Vielen Dank für die Hilfe 🙂



  • Also erstmal prinzipiell:

    Du kannst antürlich aus dem Konstruktor Funktionen aufrufen. Und wenn die halt das Objekt selbst als Argument erwartet dann kannst du es mitgeben

    void isInMap(Cplayer const& p)
    {
        // ...
    }
    
    // ...
    Cplayer::Cplayer(int posX, int posY)
    {
        m_power = 100;
        m_points = 0;
        m_energy = 200;
        m_posX = posX;
        m_posY = posY;
        isInMap(*this);    
    }
    

    So sieht das dann aus.

    Allerdings ist in dieser Funktion der Zugriff auf die Membervariablen nicht ohne weiteres möglich, da diese ja hoffentlich private sind.

    Um mal bei deinem Beispiel zu bleiben: alle Informationen (bis auf die Position) bleiben ja konstant, also werden durch Literale gesetzt. Wieso willst du diese dann auf Gültigkeit prüfen? Wenn die falsch wären, dann müsstest du einen anderen Startwert geben.

    Die Position jedoch sollte, da sie von ausserhalb kommt, auch dort geprüft werden, denn dein Player weiss (was ja auch richtig ist) nichts von der Map auf/in der er sich befindet. Das muss vorher irgendwo geklärt/geprüft werden.



  • Hey,

    vielen Danke für deine Antwort. Mit dem *this funktioniert das Programm so, wie ich es will.

    Der Sinn der Vorgehensweise sei mal dahin gestellt. Ich weiß, dass das im Ernstfall besser gelöst werden sollte. Ich wollte nur nach einer entsprechenden Methode gucken, um dann, wenn es gebraucht werden sollte, alle Membervariablen zu übergeben. 🙂

    Aber danke für den Hinweis 😃

    Gruß,
    FunkyPeanut



  • isInMap ist doch eine Memberfunktion. Da brauchst du nichts mitgeben, die kann direkt auf alles zugreifen!


Anmelden zum Antworten