Scope ::

di il
17 risposte

Scope ::

Salve a tutti, è da diversi giorni che sto sbattendo la testa con lo scope "::" in c++.
Non riesco a capire proprio il suo significato, cioè a cosa serve; l'ho capito solo per i namespace, cioè se io ho un namespace chiamato "prova", per non fare ogni volta
prova::nomemetododiprova, allora si mette "using namespace prova", così' non bisogna reinserirlo ogni volta(spero di averlo capito e che sia così)
Quello che non riesco proprio a capire è ad esempio quando viene usato per i file con la libreria fstream, cioè quando si apre un file:

nomefile.open("prova",ios::out|ios::binary) ;

quel "ios" è un namespace? No perchè out dovrebbe essere un metodo, e perché non ha le parentesi(stessa cosa per binary).
Ho provato a mettere così:

using namespace ios;
solo che mi da errore

Insomma mi potreste chiarire la mente da questo operatore che mi sta facendo impazzire.
Vi ringrazio mille in anticipo

17 Risposte

  • Re: Scope ::

    Ciao dna_programmer,
    ios non è un namespace ma è il nome di una classe. L' operatore '::' chiamato 'scope operator' si usa sia con i namespace che con le classi. 'out' e 'binary' sono delle costanti contenute dentro delle enum nella classe ios (o meglio in iosbase).
  • Re: Scope ::

    Ciao, cioé perché bisogna usare lo scope in questo caso, e cosa vuOl dire delle costanti di classi contenute dentro le enumerazioni?
  • Re: Scope ::

    Esempio.
    
    class Foo
    {
    public:
       enum type{PRIMO,SECONDO,TERZO};
    }
    
    
    
    tipo = Foo::PRIMO;
    
  • Re: Scope ::

    Ciao skynet, quindi in questo caso dovró fare :
    foo::primo , foo::secondo. Giusto?
  • Re: Scope ::

    Quindi in particolare nella classe fstream richiamando ios::out o altri , quali istruzioni vengono richiamate?
  • Re: Scope ::

    Ciao dna_programmer
    sono delle costanti, non richiami nessuna istruzione, scrivere nomefile.open("prova",ios::out) è come scrivere nomefile.open("prova", 2) (è un esempio, giusto capirci).
  • Re: Scope ::

    Ciao, cioè cosa cambia se uno scrive ("prova",2) o ad esempio ("prova",3), cioè in base alla costante scelta poi richiamerà un tipo diverso di istruzioni?
  • Re: Scope ::

    Ciao dna_programmer
    Quando scrivi open("aaa", 5) stai facendo una chiamata a funzione, cioè chiami la funzione 'open' e le passi i parametri "aaa" e 5. In base a questi parametri la funzione farà quello che deve fare. (Mi sembra che stai facendo delle domande un pò strane sei per caso assolutamente all' inizio con il C++?)
  • Re: Scope ::

    No è da 2/3 anni che lo uso solo che questo "::" mi ha portato un po' in crisi; si si ecco sostituendo i numeri mi è tutto chiaro(e ora anche con lo scope).
    Quindi in poche parole questo operatore si usa con i namespace e quando ci riferiamo a variabili contenute in enumerazioni , è così' ?
  • Re: Scope ::

    Ciao dna_programmer
    lo 'Scope Resolution Operator' (::) come dice il nome ha a che fare con lo scope, serve per guardare dentro ai namespace e alle classi, (e non è limitato solo alle enum).
    
    class MyClass
    {
    public:
    	enum Constants {cucu, pepe};
    	static int aaa;
    	static int FaQualcosa() { return 5; }
    };
    
    int main (void) 
    {
    	MyClass::Constants c = MyClass::cucu;
    	int n = MyClass::aaa;
    	int w = MyClass::FaQualcosa();
    
    	return 0;
    }
    
  • Re: Scope ::

    Quindi anche per le variabili statiche; scusa non capisco cosa vuol dire "guardare dentro le classi", cioè se io ho un metodo o attributo nella classe lo richiamo nel modo trazionale
  • Re: Scope ::

    Si mi sono espresso male, se scrivi 'cucu' non vuol dire niente perchè non c' è nulla di visibile con quel nome, però se precisi MyClass::cucu indichi lo 'scope' ovvero il posto dentro il quale si trova 'cucu'
  • Re: Scope ::

    A ok ecco, però cioè non ho capito una cosa, se io devo ad esempio richiamare il metodo "faqualcosa()" nel tuo esempio, non mi basta scrivere :

    myclass x;

    x.faqualcosa();

    perché devo mettere questo scope
  • Re: Scope ::

    Nota che FaQualcosa (e anche 'aaa') sono stati dichiarati 'static'. Per accedere a questi elementi non è necessario istanziare un oggetto ma si deve scrivere nel modo che hai visto. Questo però apre un altro argomento che per il momento tralasciamo. Pper quanto riguarda il '::' basta ricordarsi che è qualcosa che indica lo 'scope' ovvero l' ambito dentro cui trovare qualcosa.
Devi accedere o registrarti per scrivere nel forum
17 risposte