Kann Klassenmethode mit eigener Klasse aufgerufen werden?





  • @Nexus: doch, ganz sicher - fast. Es handelt sich genauer gesagt um Visual C++ 2008. Ich benutze ein -scheiss- Buch von M&T, das ziemlich konfus ist. Sonst würde ich's wohl auch hinbekommen. Ich habe bis jetzt in VBasic gewerkelt, weil mir das einfach fluffiger von der Hand geht (ich weiss, ist ja auch keine echte Programmiersprache .. bla). Leider bin ich jetzt an einem Punkt, an dem ich in VB nicht mehr weiterkomme, weil ich keinen ordentlichen Zugriff auf DirectX habe. Also muss ich mir jetzt C++ reinpacken und den ganzen Müll konvertieren. Isofern liegst Du nicht ganz daneben mit der Vermutung, ich würde versuchen zu konvertieren.

    Die Dachsymbole in der Klasse sind Syntax aus .net, sie sind nicht c++-Notation.

    Aber mal abgesehen von der Syntax, lass uns das Problem weiter abstrahieren:

    **Ich definiere innerhalb einer Klasse eine Methode (nicht statisch).
    **Kann diese Methode dann als Parameter die eigene Klasse benutzen?

    Also zB (ich weiss nicht ob das jetzt vollständig c++-syntaktisch korrekt ist, es geht ja auch nur ums Prinzipielle):

    ref class Klasse1
    {
    public:
    int wert;

    void MachWas(Klasse1 KlassenObj);
    }

    //Die Klasse besteht also aus einem Wert und einer Methode. Die Methode erhält //als Parameter ein Objekt des Typs Klasse1.
    //Die Methode wird dann weiter ausgefüllt, mit irgendwas halt.

    void MachWas(Klasse1 KlassenObj)
    {
    //hier passiert irgendwas
    }

    ..

    //Im Hauptprogramm wird dann ein Objekt Klassenobjekt des Typs Klasse 1 erzeugt,
    // und die Klassenmethode mit diesem Objekt als Argument aufgerufen.

    int main()
    {
    ..
    KlassenObj.MachWas(KlassenObj);
    ..
    }

    Eigentlich sollte das doch gehen. Vermutlich ist es doch ein syntaktisches Problem. 'ne Idee?



  • Benutze bitte C/C++-Tags; wie du das machst, steht in meinem vorherigen Beitrag.

    isitthatsimple schrieb:

    @Nexus: doch, ganz sicher - fast. Es handelt sich genauer gesagt um Visual C++ 2008.

    Visual C++ ist keine Programmiersprache, sondern nur eine Entwicklungsumgebung (IDE), um zu programmieren. 😉

    isitthatsimple schrieb:

    **Ich definiere innerhalb einer Klasse eine Methode (nicht statisch).
    **Kann diese Methode dann als Parameter die eigene Klasse benutzen?
    [...]
    Eigentlich sollte das doch gehen. Vermutlich ist es doch ein syntaktisches Problem. 'ne Idee?

    Ich hab eher das Gefühl, es liegt ein Designproblem vor. Warum soll die Methode ein Objekt der eigenen Klasse aufnehmen? Oder willst du eher ein Zeiger oder eine Referenz?

    Vor allem das

    KlassenObj.MachWas(KlassenObj);
    

    hat doch keinen Sinn. Du kannst innerhalb der Methode automatisch auf das aktuelle Objekt zugreifen, wieso willst du es also explizit übergeben?

    isitthatsimple schrieb:

    Die Dachsymbole in der Klasse sind Syntax aus .net, sie sind nicht c++-Notation.

    Willst du jetzt, dass man dir auf C++-Weise oder C++/CLI-Weise hilft? Bei letzterem bist du im falschen Forum.



  • isitthatsimple schrieb:

    **Ich definiere innerhalb einer Klasse eine Methode (nicht statisch).
    **Kann diese Methode dann als Parameter die eigene Klasse benutzen?

    Jap, wird sogar sehr häufig angewandt! Falls du schon die C++-Referenzen kennst (sind im Prinzip "sichere" Zeiger):

    class A
    {
        public:
            A& operator=( const A& other )
            {
                i = other.i;
                return *this;
            }
    
        private:
            int i;
    };
    

    Diesen Zuweisungsoperator bräuchte man in der Form auch gar nicht implementieren, das macht der Compiler schon automatisch für einen. Wie auch immer, eine Klassen-Methode darf dieselben Parameter entgegennehmen wie alle anderen Funktionen auch - also alles, was es an Typen so gibt.

    edit: Ok, hatte es falsch verstanden, du willst die eigene Klasse übergeben; scheint sich ja aber schon geklärt zu haben 🙂



  • Ich hab eher das Gefühl, es liegt ein Designproblem vor. Warum soll die Methode ein Objekt der eigenen Klasse aufnehmen? Oder willst du eher ein Zeiger oder eine Referenz?

    Das Problem taucht deswegen auf, weil ich ein Array aus den Klassenobjekten erstellt habe und der Compiler darüber meckert. Möglicherweise ist das alles ein Designproblem, auch wenn ich das jetzt so nicht sehe. Um das mal etwas zu konkretisieren: die Klasse ist eine Karte mit Koordinaten. Unter bestimmten Umständen müssen die Koordinaten getauscht/geändert werden. Da das ja irgendwie ud ausschliesslich mit der Klasse selbst zu tun hat, habe ich das als Methode in der Klasse verankert. Nun muss die Methode aber bei jedem Aufruf das komplette Objekt als Argument erhalten, damit .. ich verstehe gerade was Du meinst .-) (<-einäugig, aber nicht blind) Ich brauche ja nix zu übergeben, sondern kann direkt mit der Methode auf den Parametern werkeln.

    Vor allem das

    KlassenObj.MachWas(KlassenObj);
    

    hat doch keinen Sinn. Du kannst innerhalb der Methode automatisch auf das aktuelle Objekt zugreifen, wieso willst du es also explizit übergeben?

    Siehe oben.

    Willst du jetzt, dass man dir auf C++-Weise oder C++/CLI-Weise hilft? Bei letzterem bist du im falschen Forum.

    Egal, Du hast mir auf die Sprünge geholfen! Dafür zunächst mal Danke.

    ..auh wenn das mit der Klasse als Argument noch nicht aus der Welt ist .. 🙂



  • Badestrand schrieb:

    isitthatsimple schrieb:

    **Ich definiere innerhalb einer Klasse eine Methode (nicht statisch).
    **Kann diese Methode dann als Parameter die eigene Klasse benutzen?

    Jap, wird sogar sehr häufig angewandt! Falls du schon die C++-Referenzen kennst (sind im Prinzip "sichere" Zeiger):

    class A
    {
        public:
            A& operator=( const A& other )
            {
                i = other.i;
                return *this;
            }
    
        private:
            int i;
    };
    

    Diesen Zuweisungsoperator bräuchte man in der Form auch gar nicht implementieren, das macht der Compiler schon automatisch für einen. Wie auch immer, eine Klassen-Methode darf dieselben Parameter entgegennehmen wie alle anderen Funktionen auch - also alles, was es an Typen so gibt.

    Ah, genau!! Dann war es also doch ein Syntaxproblem. Man übergibt also nur die Zeiger, und nicht das Objekt selber. Das werde ich doch direkt mal testen!

    Danke 🙂



  • Jetzt verstehe ich nichts mehr. Zum einen sagst du, ich hätte dir die Augen geöffnet, weil man ja das eigene Objekt nicht übergeben muss.

    Nun willst du aber genau dies tun, einfach als Referenz. Ein Parameter mit einer Referenz/einem Zeiger des eigenen Typs hat nur den Sinn, wenn auch andere Argumente als das Objekt, von dem aus die Methode aufgerufen wird, übergeben werden.



  • Nexus schrieb:

    Jetzt verstehe ich nichts mehr. Zum einen sagst du, ich hätte dir die Augen geöffnet, weil man ja das eigene Objekt nicht übergeben muss.

    Nun willst du aber genau dies tun, einfach als Referenz. Ein Parameter mit einer Referenz/einem Zeiger des eigenen Typs hat nur den Sinn, wenn auch andere Argumente als das Objekt, von dem aus die Methode aufgerufen wird, übergeben werden.

    Nee, passt schon. Ich übergebe erstmal nix mehr und sehe mal, wie weit ich komme. Bei Gelegenheit muss ich das mit den Referenzen mal richtig erlernen. Dummerweise ist mein Buch totaler Müll. Hast Du Vorschläge für geeignete Literatur? Bücher mit nachvollziehbaren Beispielen gab's hier im Laden nicht. Und bevor ich wieder Euronen ausgebe, frage ich lieber mal nach.



  • isitthatsimple schrieb:

    ...Vorschläge für geeignete Literatur?

    Ich lerne momentan mit dem Buch "C++ Primer" und meiner Meinung nach ist dort alles sehr gut Beschrieben und zu dem gibt es auch zu beinahe jedem Abschnitt eines Kaptitels und Unterkapitels viele Übungsaufgaben die dabei helfen das gelesene auch anzuwenden und zu verstehen :).



  • Mizar schrieb:

    isitthatsimple schrieb:

    ...Vorschläge für geeignete Literatur?

    Ich lerne momentan mit dem Buch "C++ Primer" und meiner Meinung nach ist dort alles sehr gut Beschrieben und zu dem gibt es auch zu beinahe jedem Abschnitt eines Kaptitels und Unterkapitels viele Übungsaufgaben die dabei helfen das gelesene auch anzuwenden und zu verstehen :).

    Ah ja, hat bei Amazon zumindest nur gute Noten bekommen. Muss ich mal reinschauen. Knapp 30 Tacken ist denn auch nicht zu teuer, wenn's hilft und gut ist. Danke für den Tipp!



  • "Thinking in C++ 1&2" wird auch relativ häufig empfohlen. Die gibt es auch gratis als Online-PDF.


Anmelden zum Antworten