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

    Const in C++

    Ciao a tutti.
    Ho studiato dal libro di C++ che quando una funzione si definisce virtual, ossia può essere chiamata tramite puntatore, il che si usa nel polimorfismo ecc..., alla fine della stessa si mette la parola riservata const. Ho notato anche che ci sono, sia sul libro che negli esercizi del mio professore, delle funzioni che, pur non essendo definite virtuali, hanno la parola const alla fine. Cosa significa e perchè si mette?

    P.S.
    1)Per quanto riguarda il puntatore *this, da quanto ho capito, sarebbe un altro nome per indicare la classe dentro la quale ci troviamo, giusto?
    2)Se volessi realizzare un programma ad oggetti con l'allocazione di memoria dinamica, il delete, dovrei metterlo all'interno del distruttore?

  2. #2

    Re: Const in C++

    Originariamente inviato da AlexlovesUSA
    Ciao a tutti.
    Ho studiato dal libro di C++ che quando una funzione si definisce virtual, ossia può essere chiamata tramite puntatore, il che si usa nel polimorfismo ecc..., alla fine della stessa si mette la parola riservata const. Ho notato anche che ci sono, sia sul libro che negli esercizi del mio professore, delle funzioni che, pur non essendo definite virtuali, hanno la parola const alla fine. Cosa significa e perchè si mette?
    const e virtual sono due concetti ortogonali, cioè un metodo può essere const ma non virtual, virtual ma non const, sia const che virtual e né const né virtual, le due cose sono indipendenti.
    virtual mi pare di capire che già sai a cosa serve; const invece fa sì che il metodo non possa modificare i campi della classe, e di riflesso per questo può richiamare solo metodi const (dell'oggetto su cui opera). Per dirla in un'altra maniera, il puntatore che this che viene passato ad una funzione const è a sua volta const, per cui tramite esso il metodo non può modificare i dati puntati.
    Per ulteriori informazioni, ti consiglio di leggere questa pagina.
    P.S.
    1)Per quanto riguarda il puntatore *this, da quanto ho capito, sarebbe un altro nome per indicare la classe dentro la quale ci troviamo, giusto?
    I metodi in realtà sono delle normali funzioni, a cui viene passato come argomento "nascosto" il puntatore this, tramite il quale il metodo "sa" su che istanza della classe opera.
    2)Se volessi realizzare un programma ad oggetti con l'allocazione di memoria dinamica, il delete, dovrei metterlo all'interno del distruttore?
    Se è solo la classe in questione a "possedere" la memoria che vai a deallocare, sì.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Quindi quel const alla fine indica che la funzione può operare soltanto sui metodi costanti della classe, ossia che non vanno a modificare dati della classe. Che differenza c'è tra il metterlo all'inizio e alla fine?

  4. #4
    Const di fronte a tutto si riferisce al tipo restituito (ha senso metterlo in genere solo se si restituisce un puntatore o un reference), const alla fine si riferisce al metodo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Intendi dire se una funzione ritorna un tipo puntatore? Perchè conviene mettere const in tal caso?

  6. #6
    Non "conviene", dipende da cosa si vuole fare. Se vuoi restituire un riferimento ad un oggetto (perché creare una copia di questo oggetto è troppo dispendioso o per altri motivi) ma non vuoi che il chiamante lo modifichi, restituirai un riferimento const.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Ok, grazie mille. Ciao

  8. #8
    Amaro C++, il gusto pieno dell'undefined behavior.

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.