Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] Overloading operatore <

    Questo è il mio codice di beta test e vorrei ridefinire l'operatore < (minore)
    codice:
    #include <list>
    using namespace std;
    
    class Arco
    {
    public :
    	int ID,
    		tail,
    		head;
    
    	bool operator<(Arco primo_tail, Arco secondo_tail);
    };
    
    typedef list<Arco> listaArchi;
    
    bool Arco::operator<(Arco primo_tail, Arco secondo_tail)
    {
            // Non so che scrivere se levo primo_tail
    	return primo_tail.tail < secondo_tail.tail;
    }
    Solo che il compilatore mi dice che < vuole un solo parametro!!! Questo lo so, ma l'altro elemento di confronto lo prende per buono quando lo uso, come faccio a scrivere il return ???

    THX

  2. #2
    puoi implementarlo tramite una funzione friend

    codice:
    #include <list>
    using namespace std;
    
    class Arco
    {
    public :
    	int ID,
    		tail,
    		head;
    
    	friend bool operator<(Arco primo_tail, Arco secondo_tail);
    };
    
    typedef list<Arco> listaArchi;
    
    bool operator<(Arco primo_tail, Arco secondo_tail)
    {
            // Non so che scrivere se levo primo_tail
    	return primo_tail.tail < secondo_tail.tail;
    }

    oppure come come metodo della classe Arco

    codice:
    #include <list>
    using namespace std;
    
    class Arco
    {
    public :
    	int ID,
    		tail,
    		head;
    
    	bool operator<(Arco secondo_tail);
    };
    
    typedef list<Arco> listaArchi;
    
    bool Arco::operator<(Arco secondo_tail)
    {
            // Ecco come puoi scriverlo
            // tail equivale implicitamente a this->tail
    	return tail < secondo_tail.tail;
    }

    ad ogni modo è meglio passare i parametri "by reference"
    per evitare una copia inutile ogni volta che invochi il metodo

    codice:
    #include <list>
    using namespace std;
    
    class Arco
    {
    public :
    	int ID,
    		tail,
    		head;
    
    	bool operator<(const Arco& secondo_tail) const; 
            //                                       ^^^^^
            // metodo "const", infatti non modifica l'oggetto
    };
    
    typedef list<Arco> listaArchi;
    
    bool Arco::operator<(const Arco& secondo_tail) const
    {
            // Ecco come puoi scriverlo
            // tail equivale implicitamente a this->tail
    	return tail < secondo_tail.tail;
    }

  3. #3

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.