Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import std;
- class Test {
- public:
- auto innocuo() const -> const std::string&
- {
- //n = 100; NO metodo const
- return s;
- }
- private:
- int n {};
- std::string s = "Non voglio farla modificare dall'esterno";
- };
- class RegistroVoti {
- std::vector<int> voti;
- public:
- RegistroVoti(std::vector<int> votiIniziali) : voti(votiIniziali) {}
- // Overload non const;
- auto getVoto(int indice) -> int& {
- std::cout << "[metodo NON const]\n";
- return voti[indice]; //originale modificabile dal chiamante
- }
- // Overload const: restituisce una COPIA (int) del voto. (Potrebbe essere anche const int&)
- // Garantisce che il vettore interno non verrà toccato.
- auto getVoto(int indice) const -> int {
- std::cout << "[metodo const]\n";
- return voti[indice]; //copia, originale al sicuro
- }
- };
- // Funzione "Amministratore": riceve il registro per reference normale.
- // Può leggere e modificare i dati.
- auto correggiVoto(RegistroVoti& registro_prof) -> void {
- registro_prof.getVoto(0) = 6;
- }
- // Funzione per "Genitore": riceve il registro per const reference.
- // Può solo guardare, guai se cerca di modificare.
- auto mostraVoto(const RegistroVoti registro_genitore) -> void {
- std::println("voto in sola lettura {}", registro_genitore.getVoto(0));
- }
- int main() {
- auto test = Test{};
- //test.innocuo() = "Marameo!";
- //std::println("{}", test.innocuo());
- std::string s = test.innocuo();
- s = "marameo";
- std::println("{}", test.innocuo());
- auto s2 = test.innocuo();
- s2 = "Ci riprovo ...";
- std::println("{}", test.innocuo());
- std::vector<int> voti = { 4, 7, 8 };
- const auto& mioVoto = voti[0];
- //mioVoto = 10;
- std::println("{}", voti[0]);
- RegistroVoti mioRegistro({ 4, 7, 8, 5 });
- correggiVoto(mioRegistro);
- mostraVoto(mioRegistro);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment