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

    Private è inaccessibile al 100% dall'esterno di una classe?

    Un membro private di una classe è inaccessibile al 100% dall'esterno della classe?

    Per esempio io non potrei fare:

    codice:
    #include <iostream>
    
    using namespace std;
    
    
    class Test
    {
      private:
      int dato;
    
      public:
      void Imposta(int a);
      int * f();
    };
    
    void Test::Imposta( int a)
    {
         dato = a;
         }
    
    int * Test::f()
    {
      return &dato;
      
    }
    
    int main()
    {
        Test t;
        t.Imposta(100);
        int * x = t.f();
        *x = 22;
        
        cout << *t.f() << endl;
        system("pause");
        return 0;
        }
    Il codice funziona eccome. In teoria solo la funzione Imposta(int) potrebbe modificare dato che è private... ma io ci riesco lo stesso!
    Come mai??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: Private è inaccessibile al 100% dall'esterno di una classe?

    Originariamente inviato da gygabyte017
    Un membro private di una classe è inaccessibile al 100% dall'esterno della classe?
    Esatto. O meglio per essere precisi, essendo dato una variabile privata, vuol dire che NON puoi fare t.dato = 1234 oppure cout << t.dato.

    Originariamente inviato da gygabyte017
    Per esempio io non potrei fare:

    codice:
    #include <iostream>
    
    using namespace std;
    
    
    class Test
    {
      private:
      int dato;
    
      public:
      void Imposta(int a);
      int * f();
    };
    
    void Test::Imposta( int a)
    {
         dato = a;
         }
    
    int * Test::f()
    {
      return &dato;
      
    }
    
    int main()
    {
        Test t;
        t.Imposta(100);
        int * x = t.f();
        *x = 22;
        
        cout << *t.f() << endl;
        system("pause");
        return 0;
        }
    Il codice funziona eccome. In teoria solo la funzione Imposta(int) potrebbe modificare dato che è private... ma io ci riesco lo stesso!
    Come mai??
    Ma certo che funziona! Hai dato "al mondo intero" un puntatore alla variabile privata della classe!!! E quindi chiunque la può alterare.

    E comunque tale soluzione fa molta acqua dal punto di vista del design oop. Se la tua variabile è privata perché devi dare in giro un puntatore alla variabile???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Per farti capire meglio è come se io dicessi:

    "non ti dico dove sta casa mia ... è un indirizzo privato. Però se chiami il numero di telefono 012345678, ti diranno che il mio indirizzo è Via PincoPalla, 1234 a Vattelapesca (XY)".
    :maLOL:
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Originariamente inviato da andbin
    Per farti capire meglio è come se io dicessi:

    "non ti dico dove sta casa mia ... è un indirizzo privato. Però se chiami il numero di telefono 012345678, ti diranno che il mio indirizzo è Via PincoPalla, 1234 a Vattelapesca (XY)".
    :maLOL:


    ho capito perfettamente... ho chiesto questa cosa perchè pensavo che ci fosse un'impossibilità "fisica" nel modificare un membro privato, tipo un errore di compilazione o altro. e mi sono stupito quando ho visto che la modifica funzionava....

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.