X.methode(Y) Aufruf



  • Hallo Forum,

    dies ist mein erster Beitrag, ich hoffe ich halte alle Regeln ein und freue mich auf eure Antworten.

    Für eine Übungsaufgabe soll ich eine Klasse definieren (2 Attribute, z.B. Vektor) mit verschiedenen Methoden.

    Die main-Funktion ist vorgegeben und hier muss die Methode X.methode(Y) ausführbar sein. Was die methode macht ist nicht weiter von Bedeutung, als Beispiel könnte man eine einfache Addition durchführen, oder einen Vergleich.
    Der Rückgabewert kann folglich auch einfach ein Vektor oder ein boolscher Wert, etc. sein.

    Ich stehe hier bei der Deklaration der Methode völlig auf dem Schlauch. Wäre der Aufruf via Z.methode(X,Y), sähe das anders aus. Aber wie kann man denn eine 2-Stellige Operation (z.B. Addition) quasi einstellig definieren?

    Ich habe selbstverständlich verschiedenste Suchen verwendet, aber weiß nicht genau nach welchem Begriff ich überhaupt suchen soll.

    Vielen Dank für einen Denkanstoß.



  • Was du machst, ist, du verschiebst die Funktionsdefinition einfach in die Klasse hinein. Das sieht dann etwa so aus:

    struct vec
    {
        void methode( const vec& rhs )
        {
        }
    };
    

    methode stellt nun eine binäre Operation dar. Das erste Argument ist das Objekt, von welchem aus die Methode überhaupt aufgerufen wird. Im Ausdruck X.methode(Y); wäre das X . Um auf diesen Operanden innerhalb der Methode zugreifen zu können, kannst du this schreiben. this ist ein Zeiger auf das Objekt, mit welchem du die Methode aufgerufen hast. In diesem Beispiel entspräche this == &X resp. *this == X . Ich nehme an, dass dir Zeiger schon vertraut sind; wenn nicht, dann haben diese Vorrang.



  • hansjürgens_mvp schrieb:

    Was du machst, ist, du verschiebst die Funktionsdefinition einfach in die Klasse hinein. Das sieht dann etwa so aus:

    struct vec
    {
        void methode( const vec& rhs )
        {
        }
    };
    

    methode stellt nun eine binäre Operation dar. Das erste Argument ist das Objekt, von welchem aus die Methode überhaupt aufgerufen wird. Im Ausdruck X.methode(Y); wäre das X . Um auf diesen Operanden innerhalb der Methode zugreifen zu können, kannst du this schreiben. this ist ein Zeiger auf das Objekt, mit welchem du die Methode aufgerufen hast. In diesem Beispiel entspräche this == &X resp. *this == X . Ich nehme an, dass dir Zeiger schon vertraut sind; wenn nicht, dann haben diese Vorrang.

    Hallo und danke für die schnelle Antwort. Die Sache wird für mich jetzt etwas klarer, aber ich verstehe nicht genau für was rhs stehen soll und wie eine Funktion dann konkret aussähe. Welchen Grund hat es dass du struct statt class verwendest?
    Die genaue UML-Definition an die ich mich halten muss, lautet +method(vect):rückgabewert
    Ich glaube eine Verwendung von Zeigern widerspräche der Aufgabenstellung

    Um mal einen vorgegeben Rahmen zu definieren:

    class vect
        {
            private:
            	double x,y
    
            public:
                vect(double x_ ,double y_):x(x_),y(y_)
    			void method(vect)
    
        };
    
    void method(vect)
    {
    	//Rechenoperation z.B. Addition 
    
    	std::cout << "irgendeine Ausgabe";
    }
    
    int main()
    {
        vect X(4.9, 7.4),Y(5,13);
        X.method(Y);
        return 0;
    }
    


  • Ich habe über ein youtube Video die Antwort gefunden
    Angenommen es wird eine Addition gewünscht und der Rückgabetyp soll wieder ein Objekt der Klasse vect sein würde die Methodendefinition so aussehen (auch wenn die Funktion wenig Sinn macht weil sie die Rückgabe nicht ausgibt):

    class vect 
        { 
            private: 
                double x,y 
    
            public: 
                vect(double x_ ,double y_):x(x_),y(y_) 
                vect method(vect b) 
    
        }; 
    
    vect vect::method(vect b) 
    { 
        //Rechenoperation z.B. Addition 
      	double erg_x=x+b.x;
      	double erg_y=y+b.y 
      	return vect(erg_x, erg_y)
    } 
    
    int main() 
    { 
        vect X(4.9, 7.4),Y(5,13); 
        X.method(Y); 
        return 0; 
    }
    

    Also keine Notwendigkeit von Zeigern..



  • voidministrator schrieb:

    Also keine Notwendigkeit von Zeigern..

    du siehst sie nicht, aber sie sind da:

    double erg_x=x+b.x;
    double erg_y=y+b.y;
    

    bedeutet dasselbe wie

    double erg_x=this->x+b.x;
    double erg_y=this->y+b.y;
    

    rhs ist eine übliche abkürzung für "die rechte seite" (einer operation), rhs steht für right-hand side.


Anmelden zum Antworten