PDA

Visualizza la versione completa : [C++] Overloading operatore <


Jack.cpp
23-05-2005, 19:24
Questo il mio codice di beta test e vorrei ridefinire l'operatore < (minore)


#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

internet
23-05-2005, 23:36
puoi implementarlo tramite una funzione friend



#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



#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



#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;
}

Jack.cpp
24-05-2005, 19:13
Thx

Loading