Newsgroup: it.comp.lang.c++
Titolo: [ABC] aiutoooo plz:  overload operatori + puntatori ad oggetti + template

Ciao ancora...
ho quasi finito un progetto... mi č rimasto solo un piccolo problema:
se faccio una cosa del tipo:
------------------
template<class Elem, class Chiave> class Nodo {
    // Overloading dell'operatore == non va bene
     friend bool &operator== ( Nodo< Elem, Chiave> *node1, Nodo< Elem, 
Chiave> *node2 )
        { cout << "=="; return ( ( node1->getKey() == node2->getKey() )? 
true : false ); };
  public:
    //( blabla bla )
     // Overloading dell'operatore >
     bool &operator> ( Nodo< Elem, Chiave> *node )
        { cout << "=>"; return ( ( this.key > node.key )? true : false ); };
     // Overloading dell'operatore <
     bool &operator< ( Nodo< Elem, Chiave> *node )
        { cout << "=<"; return ( ( this.key < node.key )? true : false
}
----------------------------
e poi cerco di fare:
---------------------------
int main()
{
    Nodo<int,int> *n1 = new Nodo<int,int> ( 3, 1 ),
                  *n2 = new Nodo<int,int> ( 7, 4 ),
                  *n3 = new Nodo<int,int> ( 9, 1 );
    // testa l'overload degli operatori < > =
    char c1 = (( n1 > n2 )? '>' : '<');
    char c2 = ( n2 < n3 )? '<' : '>';
    char c3 = ( n1 == n3 )? '=' : '!';
    cout << "N1 " << c1 << " N2 (<)" << endl
         << "N2 " << c2 << " N3 (>)" << endl
         << "N1 " << c3 << " N3 (=)" << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
------------------------------
perchč non funziona l'overload degli operatori >, < e == ???
cioč: la funzione di overload non fa match con le chiamate tipo:
n1 > n2
perchč?
ho provato a farlo per valore
facendo una cosa del tipo:
&n1 > &n2;
niente...
come posso scrivere un overload per un operatore del tipo:
[Nodo< Elem, Chiave> *] operator== [Nodo< Elem, Chiave> *]
come?
aiuto please... non ho neanche piů il libro di C++!
Daniele
-- 
--------------------------------------
http://gnaskuru.altervista.org
the 
Gn.AS.ku.RU
. project HOME
-------------------------------------- 

 aiuto please... non ho neanche più il libro di C++!
Se intendi continuare a programmare in C++ ti consiglio caldamente di
comprarne uno buono.
Ciao,
Nicola

 }
     bool operator< ( Nodo< Elem, Chiave> *node )
        { cout << "=<"; return ( ( this->key < node->key )? true : false
------------------------------------------------
Poi è buona norma non usare i puntatori, ma dei const reference.
es.
     bool operator< ( const Nodo< Elem, Chiave>& node )

comprarne uno buono.
domani mi riportano il Deitel&Deitel... non sarà una bibbia, ma ha un buon 
approccio alla programmazione...
Ti ringrazio x l'aiuto... t devo una fetta d'esame!
Daniele 


ho fatto cosě
    // Overloading dell'operatore >
    friend bool operator> ( Nodo< Elem, Chiave> node1, Nodo< Elem, Chiave> 
node2 )
        { return node1.getKey() > node2.getKey(); };
ho provato a cambiarlo come dici, ma poi non funge...
DanZz 

 ha scritto nel messaggio 
news:UPHOe.75064$2U1.3...@news3.tin.it...

non funziona cosě?
friend bool operator> ( const Nodo< Elem, Chiave>& node1, const Nodo< Elem, 
Chiave>& node2 )
       { return node1.getKey() > node2.getKey(); };
mi sembra strano, a meno che getKey() vada a modificare qualcosa nella 
classe.
Prova senza il const, ma ti conviene comunque usare il reference se 
l'oggetto č corposo, per evitare l'allocazione temporanea per il passaggio 
dei parametri 

         { return node1.getKey() == node2.getKey(); };
Come ti ha gia' scritto logicMind sarebbe meglio
friend bool operator== ( const Nodo< Elem, Chiave> & node1,
        const Nodo< Elem, Chiave> & node2 )
{
  return node1.getKey() == node2.getKey();
}
Cosi' eviti di copiarti gli oggetti Nodo ogni volta che fai un
confronto.
Ciao,
Nicola