Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [c++]Overloading degli operatori?!?!??!

    Io so come funzia l' Overloading delle funzioni ma, onestamente, nn ho ancora capito Overloading degli operatori

    Qualcuno è cosi gentile e pio da spiegarmelo?????

    Ringrazio anticipatamente chiunque mi sappia aiutare

    P.S: se annettete degli esempi(anche banali ma ben COMMENTATI) nn sarebbe male
    Se in un primo momento l'idea non è assurda, allora non c'è nessuna speranza che
    si realizzi
    .
    Os: WinME
    Lang: C++
    Editor: C++ Builder 6 Enterprise

  2. #2
    E che c'è da capire? Sono esattamente la stessa cosa! Solo che invece di chiamare una funzione 'somma' la chiami 'operator+', nient'altro!

    Ciao.

  3. #3
    Originariamente inviato da r0x
    E che c'è da capire? Sono esattamente la stessa cosa! Solo che invece di chiamare una funzione 'somma' la chiami 'operator+', nient'altro!

    Ciao.
    potresti farmi un esempiodi codice ben commentato cosi capisco meglio?
    Se in un primo momento l'idea non è assurda, allora non c'è nessuna speranza che
    si realizzi
    .
    Os: WinME
    Lang: C++
    Editor: C++ Builder 6 Enterprise

  4. #4
    Solito esempio stupido:

    codice:
    #include <iostream.h>
    
    class ClasseStupida
    {
    public:
    	ClasseStupida()
    	{
    		membro = 100;
    	}
    
    	int somma( int addendo )
    	{
    		return membro + addendo;
    	}
    	int operator+( int addendo )
    	{
    		return membro + addendo;
    	}
    
    private:
    	int membro;
    };
    
    void main()
    {
    	ClasseStupida numero;
    	int addendo = 10;
    
    	cout << numero.operator+( addendo ) << endl;
    	cout << ( numero + addendo ) << endl;	// forma infissa equivalente a quella sopra
    
    	cout << numero.somma( addendo ) << endl;
    }
    I due metodi, come avrai visto, si equivalgono in tutto, a parte per la scelta della forma infissa che solo l'operatore offre. Tieni conto solo di una cosa: almeno un parametro della funzione operatore deve essere un tipo di classe. In questo caso c'è il parametro sottinteso 'this'.

    N.B.: nell'esempio l'operatore è un membro di classe, ma non lo deve essere per forza, può anche essere una funzione globale.

    Ciao.

  5. #5
    Originariamente inviato da r0x
    Solito esempio stupido:

    codice:
    #include <iostream.h>
    
    class ClasseStupida
    {
    public:
    	ClasseStupida()
    	{
    		membro = 100;
    	}
    
    	int somma( int addendo )
    	{
    		return membro + addendo;
    	}
    	int operator+( int addendo )
    	{
    		return membro + addendo;
    	}
    
    private:
    	int membro;
    };
    
    void main()
    {
    	ClasseStupida numero;
    	int addendo = 10;
    
    	cout << numero.operator+( addendo ) << endl;
    	cout << ( numero + addendo ) << endl;	// forma infissa equivalente a quella sopra
    
    	cout << numero.somma( addendo ) << endl;
    }
    I due metodi, come avrai visto, si equivalgono in tutto, a parte per la scelta della forma infissa che solo l'operatore offre. Tieni conto solo di una cosa: almeno un parametro della funzione operatore deve essere un tipo di classe. In questo caso c'è il parametro sottinteso 'this'.

    Ciao.
    ora ho capito, tnk
    Ma è meglio usare l'overloading di operatori o di funzioni ???
    E in quale ambito usarle?????

    P.S: sei mai stato qui???????
    Se in un primo momento l'idea non è assurda, allora non c'è nessuna speranza che
    si realizzi
    .
    Os: WinME
    Lang: C++
    Editor: C++ Builder 6 Enterprise

  6. #6
    Ma è meglio usare l'overloading di operatori o di funzioni ???
    E in quale ambito usarle?????
    Questione di comodità!

    Quanto al newsgroup .. ma il thread che propone di sostituire il C++ con il C è ironico o cosa?

    Ciao.

  7. #7
    >Questione di comodità!

    qiundi è indifferente usare uno o l'altro, giusto????

    >Quanto al newsgroup .. ma il thread che propone di sostituire il C++ con il C è ironico o cosa?

    Secondo me è pazzo, ma gli hai risposto?????

    P.S: lo sapevi che esisteva il newsgrup?
    Se in un primo momento l'idea non è assurda, allora non c'è nessuna speranza che
    si realizzi
    .
    Os: WinME
    Lang: C++
    Editor: C++ Builder 6 Enterprise

  8. #8
    1) Sì, fondamentalmente è uguale, ma normalmente usare un operatore (nei casi opportuni) rende il codice più leggibile.

    2) Probabilmente scherza.

    3) Sì diciamo che di nome lo conoscevo.

    Ciao.

  9. #9
    ho capito i Template!!!!!!

    P.S:guarda che ho trovato
    Se in un primo momento l'idea non è assurda, allora non c'è nessuna speranza che
    si realizzi
    .
    Os: WinME
    Lang: C++
    Editor: C++ Builder 6 Enterprise

  10. #10
    codice:
    #include <iostream>
    #include <string>
    
    template<class T>
    T max(T arg1, T arg2){
        if (arg1 >= arg2)
            return arg1;
        else
            return arg2;
    }
    
    int main(){
        std::cout << max(5, 3) << std::endl;
        std::cout << max(5.6, 3.2) << std::endl;
        std::cout << max(std::string("a"), std::string("b")) << std::endl;
        return 0;
    }
    Mi raccomando, fai attenzione alle due stringhe "a" e "b": non sono 'char*' ma oggetti 'string' (STL).

    Nota che in questo semplice caso il compilatore
    capisce da solo di che tipo sono gli argomenti, in casi ambigui devi
    specificarlo tu.
    E' quando ti parlavo delle chiamate con argomento implicito o esplicito (swap() e swap< int >() ad esempio).

    Ultima cosa: il modo per overloadare una funzione template te l'ho illustrato nell'altro thread, può servire. :adhone:

    Ciao.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.