fcamuso

Corso C++ 43: metodi const e auto

Jul 23rd, 2026
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.95 KB | None | 0 0
  1. import std;
  2.  
  3. class Test {
  4.  public:
  5.      auto innocuo() const -> const std::string&
  6.      {
  7.          //n = 100; NO metodo const
  8.          return s;
  9.      }
  10.  
  11.  private:
  12.    int n {};
  13.    std::string s = "Non voglio farla modificare dall'esterno";
  14. };
  15.  
  16.  
  17.  
  18.  
  19. class RegistroVoti {
  20.     std::vector<int> voti;
  21.  
  22. public:
  23.     RegistroVoti(std::vector<int> votiIniziali) : voti(votiIniziali) {}
  24.  
  25.     // Overload non const;
  26.    auto getVoto(int indice) -> int& {
  27.         std::cout << "[metodo NON const]\n";
  28.         return voti[indice]; //originale modificabile dal chiamante
  29.     }
  30.  
  31.  
  32.     // Overload const: restituisce una COPIA (int) del voto. (Potrebbe essere anche const int&)
  33.     // Garantisce che il vettore interno non verrà toccato.
  34.     auto getVoto(int indice)  const -> int {
  35.         std::cout << "[metodo const]\n";
  36.         return voti[indice]; //copia, originale al sicuro
  37.     }
  38.  
  39. };
  40.  
  41. // Funzione "Amministratore": riceve il registro per reference normale.
  42. // Può leggere e modificare i dati.
  43. auto correggiVoto(RegistroVoti& registro_prof) -> void {
  44.     registro_prof.getVoto(0) = 6;
  45. }
  46.  
  47. // Funzione per "Genitore": riceve il registro per const reference.
  48. // Può solo guardare, guai se cerca di modificare.
  49. auto mostraVoto(const RegistroVoti registro_genitore) -> void {
  50.     std::println("voto in sola lettura {}", registro_genitore.getVoto(0));
  51. }
  52.  
  53. int main() {
  54.  
  55.     auto test = Test{};
  56.     //test.innocuo() = "Marameo!";
  57.     //std::println("{}", test.innocuo());
  58.    
  59.    
  60.     std::string s = test.innocuo();
  61.     s = "marameo";
  62.     std::println("{}", test.innocuo());
  63.  
  64.     auto s2 = test.innocuo();
  65.     s2 = "Ci riprovo ...";
  66.     std::println("{}", test.innocuo());
  67.  
  68.     std::vector<int> voti = { 4, 7, 8 };
  69.     const auto& mioVoto = voti[0];
  70.  
  71.     //mioVoto = 10;
  72.     std::println("{}", voti[0]);
  73.  
  74.     RegistroVoti mioRegistro({ 4, 7, 8, 5 });
  75.     correggiVoto(mioRegistro);
  76.     mostraVoto(mioRegistro);
  77.  
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment