Operator überladaen



  • Hey Leute,
    kleines Problemchen. Ich möchte einen Operator überladen um mich durch eine verkettete Liste zu hangeln. Arbeite dabei nur! mit Zeigern.

    B* operator + (B *tmp) {
    	return tmp = tmp->next;
    }
    
    class A {
    	public:
    
    		B*		start;
    
    	private:
    
    		//operator
    		friend B* operator++(B *tmp);
    };
    

    um dann in einer Schleife
    zb so zu iteriern:
    B* tmp = start;
    while () {
    tu was
    tmp++;
    }

    Wie mach ich das am besten? Gehen Zeiger überhaupt? 😕 😕

    Gruß dave



  • Naja so die Bennenung der Klassen,trotz Beispiel, ist nicht gerade der Renner.An deiner Stelle würde ich in die Klasse A einen weitere Klasse Iterator einpflegen, die einen Listenknoten als private Member hält und mit dem hangelst du dich da dann durch, ich hatte sowas ähnliches mal hier gefragt.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-231434.html



  • Du willst nicht den operator+ überladen, sondern den operator++ .

    B* operator++() //präinkrement
    {
       return next;
    }
    
    B* operator++(int) //postinkrement
    {
       B* temp = next;
       ++;next
       return temp; 
    }
    


  • Tachyon schrieb:

    Du willst nicht den operator+ überladen, sondern den operator++ .

    B* operator++() //präinkrement
    {
       return next;
    }
    
    B* operator++(int) //postinkrement
    {
       B* temp = next;
       ++;next
       return temp; 
    }
    

    du meinst sicherlich

    B* operator++(int) //postinkrement
    {
       B* temp = next;
       ++*next
       return temp; 
    }
    


  • Firefighter schrieb:

    du meinst sicherlich

    B* operator++(int) //postinkrement
    {
       B* temp = next;
       ++*next
       return temp; 
    }
    

    Nö, ich meinte schon ++next . Man will doch aufs nächste Element zeigen, und nicht das Element selbst inkrementieren (mal davon abgesehen, dass das u.U. nichtmal geht).



  • Hmm, ich bin der Meinung ein solches Konstrukt bei dem Breymann in dem buch gelesen zu haben... Ich schau nochmal nach.



  • Ok ich revidiere meine Meinung. Ich habs einfach nur im falschen zusammenhang im buch auf die Problemstellung übertragen.sorry.


Anmelden zum Antworten