Funzioni virtual

di il
73 risposte

73 Risposte - Pagina 3

  • Re: Funzioni virtual

    Si So che come sintassi e molto simile al vb.net
  • Re: Funzioni virtual

    Si, oramai i due linguaggi differiscono solo per i fronzoli, in uno scrivi 'int x' nell' altro 'Dim x as Integer' ma la sostanza è la stessa. Inoltre conoscere il .NetFramework significa conoscere la sua sterminata libreria ad oggetti, e questa è comune ad entrambi i linguaggi per cui imparata per l' uno vale anche per l' altro. (però stiamo andando OT )
  • Re: Funzioni virtual

    A ok no problem. una cosa rivedendo il tutto mi è sorto un dubbio(sarò stupido boh xD) riferendoti a questo esempio tuo:
    
    
    #include <iostream>
    #include <string.h>
    #include <conio.h>
    
    using namespace std;
    
    class Animale
    {
    public:
       virtual void Parla() = 0;
    };
    
    class Gatto: public Animale
    {
    public:
       virtual void Parla()
       {
          cout << "Miao" << endl;
       }
    };
    
    class Cane: public Animale
    {
    public:
       virtual void Parla()
       {
          cout << "Bau" << endl;
       }
    };
    
    int main()
    {
       Animale* animale = NULL;
    
            // supponi che qui ci sia una condizione qualsiasi, ad esempio legge un file per fare la scelta
       if (true) 
          animale = new Gatto();
       else
          animale = new Cane();
    
       animale->Parla();
    
       return 0;
    }
    
    
    
    per scegliere quale animale è stato fatto non potrei fare pure in questo modo:
    
     if (true) 
          gatto.parla();
       else
         cane.parla();
    
     
    correggimi se sbagliato
  • Re: Funzioni virtual

    Certo ma se la classe ti fosse data da una funzione come fai?
    
    Animale * Funzione()
    {
     .............
    }
    ....
    
    main
    .....
    
    Animale *animale = Funzione();
    animale->Parla();
    
    Se non vuoi usare il typeid questo è l'unico modo.
  • Re: Funzioni virtual

    Ciao, scusami ma non ho capito il passaggio che hai fatto, potresti rispiegarmelo ?
    typeid cos'è?
  • Re: Funzioni virtual

    
        #include <iostream>
        #include <string.h>
        #include <conio.h>
    
        using namespace std;
    
        class Animale
        {
        public:
           virtual void Parla() = 0;
        };
    
        class Gatto: public Animale
        {
        public:
           virtual void Parla()
           {
              cout << "Miao" << endl;
           }
        };
    
        class Cane: public Animale
        {
        public:
           virtual void Parla()
           {
              cout << "Bau" << endl;
           }
        };
    
    Animale *Funzione( bool val)
    {
       if(val)
          return new Gatto();
        return new Cane();
    }
    
        int main()
        {
           Animale* animale = NULL;
    
           animale = Funzione(true);
           animale->Parla();
    
           return 0;
        }
    
    typeid è una keyword del linguaggio C++. serve per determinare a runtime il tipo di classe.
    http://en.wikipedia.org/wiki/Typei

    Nel tuo caso il main si può scrivere
    
     int main()
        {
    	   if(typeid(Funzione(true)) == typeid(Gatto))
    	  {
    		  Gatto gatto;
    		  gatto.Parla();
    	  }
    	   else
    	   {
    		   Cane cane;
    		   cane.Parla();
    	   }
    
           return 0;
        }
    
  • Re: Funzioni virtual

    Scusa non ho capito questo passaggio
    
    Animale *Funzione( bool val)
    {
       if(val)
          return new Gatto();
        return new Cane();
    }
    
    
    Animale *Funzione( bool val) cosa sarebbe una funziona di tipo animale? Non capisco
  • Re: Funzioni virtual

    Si è solo un esempio di una funzione che ti ritorna un puntatore ad una classe base. E' un esempio non prenderlo come magia. Se dovessi sapere a run-time che tipo di classe sta funzione ritorna come faresti? Era un esempio per farti vedere come potresti usare typeid
  • Re: Funzioni virtual

    A ok solo che non riesco a capire cosa vuol dire:
    "funzione che ti ritorna un puntatore ad una classe base"
    cioè non ho mai visto una classe con una funzione ecco
  • Re: Funzioni virtual

    Fammi capire. non hai mai visto questo?
    
    char * Funzione()
    {
        return new char[100];
    }
    
  • Re: Funzioni virtual

    No non ho mai visto una funzione col puntatore
  • Re: Funzioni virtual

    Strano. ci sono un casino di funzioni che ritornano dei puntatori almeno in C vedi per esempio strtok
  • Re: Funzioni virtual

    Scusami gentilemente mi potresti spiegare il funzionamento di questi tipi di funzioni
    cioè ad esempio:
    
    char * Funzione()
    {
        return new char[100];
    }
    
    Cosa fa?
  • Re: Funzioni virtual

    Ua funzione del genere niente ma una funzione così qualcosa fa
    
    char * Funzione(bool condizione)
    {
       char *str = NULL;
       if(condizione)
       {
           str = new char[5];
           strcpy(str,"ciao");  
       }
       else
       {
           str = new char[10];
           strcpy(str,"ciao ciao");  
      }
      return str;
    }
    
    A seconda del valore della condizione io decido se allocare 5 char oppure 10 char quindi a qualcosa serve.
  • Re: Funzioni virtual

    Cioè forse mi sono spiegato male io; non è che non ho mai visto una funzione che ritorna qualcosa ma non ho mai visto una funzione che ha un puntatore
Devi accedere o registrarti per scrivere nel forum
73 risposte