Operatori di risoluzione dello scope Nel C++ è - TelPar

Download Report

Transcript Operatori di risoluzione dello scope Nel C++ è - TelPar

Appunti di OOP in C++
telpar.altervista.org
Operatori di risoluzione dello scope
Nel C++ è possibile dichiarare variabili globali e locali che hanno lo stesso nome.
E' possibile utilizzare l'operatore unario di risoluzione dello scope (::) per accedere a una variabile
globale all'interno di un blocco che dichiara una variabile locale con lo stesso nome.
Attenzione, però, non è possibile utilizzare questo operatore per accedere a un variabile locale alla
funzione, ma appartenente a un blocco esterno. Es.
#include <iostream>
int a = 100;
// variabile 'a' globale (allocata in area statica)
int main()
{
int a = 1; // variabile 'a' locale (allocata in area stack)
{
int a = 2; //var.'a' locale ma appartenente a un blocco interno
std::cout << "a locale: " << a << ", a globale: " << ::a << endl;
}
}
Il risultato sarà:
a locale: 2, a globale: 0
Come si vede, l'altra variabile locale 'a' (cioè dello stesso record di attivazione di main() ), ma
esterna al blocco, non è accessibile.
L'operatore binario di risoluzione dello scope (::) si utilizza invece con le classi, per definire
all'esterno dell corpo dichiarativo della classe, funzioni membro e variabili membro statiche:
void MyClass::printValues() const {
//...
}
int MyClass::i = 1;
Questo è un esempio di overloading di operatori implicito, fornito cioè dal linguaggio; il
compilatore, “vede” il contesto in cui lo stesso operatore viene invocato e ne interpreta di
conseguenza il ruolo.