[Anfänger] Objekt einer Klasse an Methode einer anderen Klasse übergeben



  • Eine Ganz einfache Frage, wie sollte es "standardmäßig" aussehen, wenn ich ein Objekt einer Klasse an eine Methode einer anderen Klasse übergeben will?

    Was muss in der Headerdatei der Klasse stehen, die die "fremde" Methode beinhaltet?
    Wie muss die Parameterliste der fremden Methode aussehen?
    Wie muss letztendlich der Aufruf / die Parameterübergabe im Programm aussehen?

    Ich möchte keine Kopie des Objekts, sondern alle Inhalte des Objekts auch in der fremden Methode anfassen können.



  • Wie sehen denn deine Versuche bis jetzt aus?



  • Nimm es mir nicht übel, aber du könntest all diese Fragen selbst beantworten, wenn du ein Kapitel zu Objekten und Klassen in einem Grundlagenbuch lesen würdest.



  • [Rewind] schrieb:

    Nimm es mir nicht übel, aber du könntest all diese Fragen selbst beantworten, wenn du ein Kapitel zu Objekten und Klassen in einem Grundlagenbuch lesen würdest.

    Ich habe hier 2 "Grundlagenbücher". Beide beinhalten nicht die gesuchte Syntax. Vielleicht bin ich auch zu blöd, mir die gesuchte Syntax bei Übergabe eines Objektes zusammenzureimen. Oder ich habe die falschen Bücher. Je länger ich mich in diesem Forum bewege, desto unleugbarer wird diese Erkenntnis.

    Gugelmoser schrieb:

    Wie sehen denn deine Versuche bis jetzt aus?

    Beispielcode:

    class ersteklasse
    {...}
    
    class zweiteklasse
    {
    void einetollemethode(ersteklasse*)
    }
    
    void zweiteklasse::einetollemethode(ersteklasse*)
    {...}
    
    ersteklasse erstesobjekt;
    
    einetollemethode(erstesobjekt*);
    

    So in etwa sieht das bei mir aus. Ich habe schon sehr viele Kombinationen aus Referenzen, Zeigern und syntaktischen Zusammenstellungen von Klassen- und Objektname durchprobiert. Wie geht es richtig?



  • thuering schrieb:

    Beispielcode:

    class ersteklasse
    {public: int x;};
    
    class zweiteklasse
    {
    public: void einetollemethode(ersteklasse &in) //Referenz auf ein Objekt von ersteklasse
    };
    
    void zweiteklasse::einetollemethode(ersteklasse &in)
    {in.x = 8;}
    
    ersteklasse erstesobjekt;
    
    einetollemethode(erstesobjekt);
    


  • Hier nochmal ein vollständiges, kompilierbares Beispiel:

    #include <iostream>
    
    class A
    {
    	public:
    		int x;
    };
    
    class B
    {
    	public:
    		void methode(A &in);
    };
    
    void B::methode(A &in)
    {
    	in.x = 8;
    }
    
    int main()
    {
    	A objekt;
    
    	objekt.x = 5;
    	std::cout << objekt.x << '\n';
    
    	B objekt_2;
    
    	objekt_2.methode(objekt);
    
    	std::cout << objekt.x << '\n';
    }
    


  • Header foo.h

    class foo
    {
    public:
        void print(void) const;
    };
    

    Header bar.h

    // forward declaration
    // complete class declaration is not needed here as we only use a reference to foo
    class foo;
    
    class bar
    {
    public:
        void call_foo_print(foo const & obj) const;
    };
    

    Code foo.cpp

    #include "foo.h"
    
    #include <iostream>
    
    void foo::print(void) const
    {
        std::cout << "Foo!" << std::endl;
    }
    

    Code bar.cpp

    #include "bar.h"
    // this time we need the header -> we want to access foo
    #include "foo.h"
    
    void bar::call_foo_print(foo const & obj) const
    {
        obj.print();
    }
    

    EDIT: Achja, ich war zu faul Include-Guards in die Header zu packen.
    Falls du mit dem Begriff nichts anfangen kannst, siehe hier: http://en.wikipedia.org/wiki/Include_guard


Log in to reply