Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C++]Mi spiegate la sintassi di questo pezzetto di codice??

    all'interno di una classe ho trovato:

    char Char(void) const{ return *pCurrentChar;}

    cosa vuol dire mettere "const" in quella posizione??

    cosa significa fare:

    int Funzione() = 0;

    ??

    ciao
    eXtending-Php.net coming soon ...

  2. #2
    Utente di HTML.it L'avatar di --LO--
    Registrato dal
    Dec 1999
    residenza
    San Michele All'Adige
    Messaggi
    249
    sicuro che quel const sia messo lì?
    ma funziona il codice dove è messo?

    la seconda l'ho letto tempo fa, ma ora come ora non ricordo.al masismo guardo e te lo dico che non vorrei dire fesserie

  3. #3

    Re: [C++]Mi spiegate la sintassi di questo pezzetto di codice??

    Originariamente inviato da Dark Bard
    all'interno di una classe ho trovato:

    char Char(void) const{ return *pCurrentChar;}

    Credo sia come final in Java..
    sai che puoi richiamare una funzione solo richiamando il puntatore alla funzione??
    mi sembra che dichiari una funzione(qui una procedura) Char che ha un ritorno char e ritorna il carattere contenuto alla locazione
    puntata da pCurrentChar..


    cosa vuol dire mettere "const" in quella posizione??

    cosa significa fare:

    int Funzione() = 0;
    [il puntatore della funzione assume valore 0 o restuituisce 0??
    non ricordo bene..]
    ??

    ciao




    comunque int (*puntatore)(); e' un puntatore a una funzione..
    int (*funzione)(parametri...)
    mi sa' che devo riguardarmi i puntatori a funzioni...

  4. #4
    Utente di HTML.it L'avatar di --LO--
    Registrato dal
    Dec 1999
    residenza
    San Michele All'Adige
    Messaggi
    249
    guardato
    allora il const stabilisce che quella funzione è una funzione costante (Esatto, come il final in java)

    l'altra indica che f è una funzione pura

  5. #5
    Originariamente inviato da --LO--
    guardato
    allora il const stabilisce che quella funzione è una funzione costante (Esatto, come il final in java)

    l'altra indica che f è una funzione pura
    in che senso?????????????????
    rimembra, molto gentilmente, a un povero ragazzo disastrato nei pensieri
    cose che ha letto una volta nella sua vita per sbaglio...

  6. #6
    int Funzione()=0;

    non l'ho mai visto (ma magari esiste non lo so).

    forse ti riferisci a

    codice:
    class Classe
    {
        virtual int Funzione()=0;
    }
    In questo caso si dice che la classe Classe è una classe astratta (in java sarebbe avresti scritto abstract invece di virtual ... = 0) ovvero non può essere istanziata.

    Quando crei un metodo virtuale il compilatore fa in modo di utilizzare sempre il codice overridato della classe derivata a cui appartiene l'istanza dell'oggetto, anche se tramite un casting è stato ridotto ad un tipo base; per implementare questo comportamento esiste un certo "costo" a runtime; un codice inserito dal compilatore controlla su un'apposita tabella (v-table) associata all'oggetto qual'è il puntatore alla funzione corretta da richiamare, la risoluzione a differenza delle altre funzioni membro non avviene quindi staticamente ma dinamicamente a runtime.

    Se il metodo oltre ad essere virtuale è anche puro, significa che le classi derivate devono implementare tutti i metodi virtuali puri per potere essere istanziabili.

    Quindi se hai una funzione che prende una classe base come parametro e sai che questa funzione esegue un metodo virtual sei sicuro che verrà eseguito il codice giusto per quella determinata istanza.

    esempio
    codice:
    class forma
    {
       virtual double Area()=0;
    };
    
    class rettangolo
    {....
       double Area(){return base * altezza;}
    };
    
    class quadrato : public rettangolo{
      ...
    double Area(){return base * base ;}
    
    };
    
    void stampaArea(forma &f)
    {
       cout << f.Area(); //controlla qual'è l'istanza di f ed esegue
                         // il metodo corretto a seconda che sia 
                         //rettangolo o quadrato
    }
    
    ....
    FUNZIONI MEMBRO COSTANTI
    codice:
    class C
    {
     ...
    char *buffer;
    char *pCurrentChar;
    public:
       char Char(void) const{ return *pCurrentChar;} 
       char Next(void){ return ++pCurrentChar,*pCurrentChar;} 
    ...
    };
    Per quanto riguarda la definizione di una funzione costante, significa che stai dichiarando che questa funzione non modifica i dati membro.

    Cio permette al compilatore di lasciarti usare questo metodo anche se il tuo oggetto è dichiarato costante, ad esempio

    const C classe;
    C.Char(); //legale
    C.Next(); //illegale perchè l'oggetto è const e Next non è costante


    NB
    Queste definizioni che ho dato non sono rigorose tecnicamente, se sei incuriosito prendi un buon libro sul C++ (ce ne sono pochi titoli, se cerchi sul forum trovi diverse discussioni a riguardo).

  7. #7
    Utente di HTML.it L'avatar di --LO--
    Registrato dal
    Dec 1999
    residenza
    San Michele All'Adige
    Messaggi
    249
    come detto da Andrea, l'ho trovata ripassando java per l'esame di oggi.
    é una funzione virtuale (o astratta in c++)

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