this als Parameter übergeben, aus Java- mach C++-Code



  • Servus,

    ich bekomme es nicht hin, dass mein Programm kompiliert. Dazu kann ich nicht genau einschätzen, ob es egal ist, Referenzen oder Zeiger in Methoden hinein und aus Methoden heraus zu geben?

    Ich habe eine Klasse A und eine Klasse B. A hat eine Methode machAufA( B b ); und in der Methode machAufA erfolgt der Aufruf auf der B-Instanz mit A als Parameter. Wie gießt ihr so etwas in C++-Code?

    In Java mach ich es so:

    public class A {
    
    	// Java
    	double zahlenWert;
    
    	public A( B b ) {
    		this.zahlenWert = b.computeSomething( this );
    	}
        ....
    


  • class A
    {
       double zahlenWert;
    
       public:
           A( B& b )
           { 
              zahlenWert = b.computeSomething( this );
           }
    };
    

    Wenn b 0 sein darf, sollte ein Zeiger statt einer Referenz verwendet werden.


  • Mod

    Das sieht ziemlich direkt übertragbar aus, wenn man die Syntax anpasst:

    class A {
    
        // C++ :-)
        double zahlenWert;
    
      public:
         A( B b ) {
            zahlenWert = b.computeSomething( this );   // Member braucht man nicht durch this zu qualifizieren
        }
    

    Wobei man noch entscheiden kann, ob das this beim Aufruf von computeSomething nicht vorher noch dereferenziert werden sollte. Und eventuell kann man den ganzen Aufruf auch in die Initialiserungsliste packen, aber das kommt dann darauf an, was computeSomething genau mit dem A macht.



  • Okay, eine Frage habe ich dazu noch: this ist ja die Übergabe als konstanter Zeiger, aber hier wird ja von der aktuellen Instanz ein Eigenschaftswert errechnet - das heißt doch, dass ich this hier nicht nehmen kann, weil this nur mit lesendem Zugriff vereinbar ist - oder?



  • nein auf this kannst du schreiben und lesen
    es sei denn die aktuelle methode ist mit const gekennzeichnet



  • Jay1980 schrieb:

    Servus,

    ich bekomme es nicht hin, dass mein Programm kompiliert. Dazu kann ich nicht genau einschätzen, ob es egal ist, Referenzen oder Zeiger in Methoden hinein und aus Methoden heraus zu geben?

    Ich habe eine Klasse A und eine Klasse B. A hat eine Methode machAufA( B b ); und in der Methode machAufA erfolgt der Aufruf auf der B-Instanz mit A als Parameter. Wie gießt ihr so etwas in C++-Code?

    In Java mach ich es so:

    public class A {
    
    	// Java
    	double zahlenWert;
    	
    	public A( B b ) {
    		this.zahlenWert = b.computeSomething( this );
    	}
        ....
    

    this ist in C++ spaßigerweise ein Zeiger.
    Deswegen

    this->zahlenWert = b.computeSomething( this );
    


  • Okay, eine Frage habe ich dazu noch: this ist ja die Übergabe als konstanter Zeiger, aber hier wird ja von der aktuellen Instanz ein Eigenschaftswert errechnet - das heißt doch, dass ich this hier nicht nehmen kann, weil this nur mit lesendem Zugriff vereinbar ist - oder?

    In C++ gibt es Unterscheidungen zwischen Konstante zeiger und Zeiger auf Konstanten. Ein Konstanter Zeiter kann auf nichts anderes mehr zeigen.
    Ein Zeiger auf ne Konstate bewirkt das du den Wert über den Zeiger nicht ändern kannst, sei der Wert jetzt wirklich konstant oder nicht (dereferenzierter Wert wird als Konstante behandelt, egal ob nun als const deklariert oder nicht).
    Natürlich gibt es dann auch konstante Zeiger auf Konstanten.


Anmelden zum Antworten