Overloading operatori

di il
5 risposte

Overloading operatori

Sto studiando l'overloading degli operatori e sto provando a sovraccaricare l'operatore +
#include <iostream>
#include <string>
using namespace std;

// vogliamo realizzare una classa Alieno e sovraccaricare l'operatore + in modo da creare da due alieni un nuovo alieno con le caratteristiche del primo + quelle del secondo:



class alien{
public :
	alien(string name, int livello, int forza){
	cout<<"Costruttore richiamato per "<<name<<endl;
	cout<<"Lv. "<<livello<<endl;
	cout<<"Forza "<<forza<<endl;
	}

	alien operator+( const alien & a, const alien & b){       ////////////errore qui*
	alien fusione;
	fusione.livello=a.livello+b.livello;
	fusione.forza=a.forza+b.forza;
	return fusione;
	}

private:
	int livello;
	int forza;
};



int main() {

	alien alieno1("ET",7,4);
	alien alieno2("Junior",15,9);
	alien alieno3=alieno1+alieno2;


	return 0;
}
l'errore che ho è il seguente : * alien alien::operator+(const alien&, const alien&)' must take either zero or one argument

5 Risposte

  • Re: Overloading operatori

    
    class alien{
    public :
    	alien(string n, int liv, int f)
    	{
    		nome=n;
    		livello=liv;
    		forza=f;
    
    		cout<<"Costruttore richiamato per "<<nome<<endl;
    		cout<<"Lv. "<<livello<<endl;
    		cout<<"Forza "<<forza<<endl;
    	}
    
       alien operator+(alien &other)
       {       
    		return alien(nome + "+" + other.nome, livello + other.livello, forza + other.forza );
       }
    
    private:
    	string nome;
    	int livello;
    	int forza;
    };
    
  • Re: Overloading operatori

    Ok in definitiva così funziona :
    #include <iostream>
    #include <string>
    using namespace std;
    
    
    class alien{
        public :
        alien(string n, int liv, int f)
        {
            nome=n;
            livello=liv;
            forza=f;
            
            cout<<"Costruttore richiamato per "<<nome<<endl;
            cout<<"Lv. "<<livello<<endl;
            cout<<"Forza "<<forza<<endl;
        }
        
        alien operator+(alien & other)
        {
            return alien(nome + "+" + other.nome, livello + other.livello, forza + other.forza );
        }
        
    private:
        string nome;
        int livello;
        int forza;
    };
    
    int main(int argc, const char * argv[])
    {
    
        alien alien1("pinco",4,7);
        alien alien2("pallino",5,8);
        alien alien3=alien1+alien2;
        
        return 0;
    }
    ma non capisco effettivamente come fa la funzione a prendere i parametri di alien 1 per sommarli a quelli di alien 2 .
    In :
     alien operator+(alien & other)
        {
            return alien(nome + "+" + other.nome, livello + other.livello, forza + other.forza );
        }
    non abbiamo passato alcun riferimento per l'operando di sx (alien1), e non capisco effettivamente come funzioni
  • Re: Overloading operatori

    Devi pensare all'operatore + come un metodo applicato al primo oggetto. Quindi, il primo oggetto è l'oggetto corrente (this) che esegue l'operatore + con i propri membri e con quelli del secondo oggetto (other)
  • Re: Overloading operatori

    Ok perfetto, mi sto allettando con tutti gli altri operatori, c'è qualche esercizio da proporre?
  • Re: Overloading operatori

    Sto provando a sovraccaricare gli operatori << e >>
    
    #include <iostream>
    #include <string>
    using namespace std;
    class phoneNumber{
        friend ostream & operator <<( ostream &,const phoneNumber &);
        friend istream & operator >>( istream &, phoneNumber &);
        private :
        string areaCode;
        
    };
    
    int main(int argc, const char * argv[])
    {
        phoneNumber phone;
        cout<<"\n Inserisci i numeri : ";
        cin>>phone;
        
        
        
        return 0;
    }
    
    ostream & operator <<(ostream & output, const phoneNumber &number){
        output <<number.areaCode;
        return output;
    }
    
    
    istream & operator>>(istream & input, phoneNumber & number){
        input>>number.areaCode;
        return input;
    }
    subito dopo l'input leggo nella console questo codice : (lldb)
Devi accedere o registrarti per scrivere nel forum
5 risposte