Cosa fa :: in C++?

Cosa Fa In C



C++ è un linguaggio di programmazione versatile che offre agli sviluppatori un'ampia gamma di funzionalità. Una delle funzionalità più comunemente usate in C++ è il operatore di risoluzione dell'ambito , noto anche come il doppi due punti (::) . Nonostante sia una parte vitale della lingua, il doppio colon L'operatore può essere fonte di confusione per molti sviluppatori, in particolare per quelli che lo utilizzano per la prima volta.

In questa guida, esamineremo il operatore doppio colon (::). in C++ e come funziona in diversi scenari.

Cosa fa :: in C++?

In C++, il risoluzione dell'ambito operatore (::) viene utilizzato per recuperare i nomi delle variabili presenti a vari livelli di ambito. L'ambito nella programmazione si riferisce al contesto in cui è possibile accedere a variabili e funzioni.







Usi di :: in diversi casi in C++

In C++, il operatore di risoluzione dell'ambito (::) ha vari usi a seconda del contesto in cui viene utilizzato. Di seguito sono riportati alcuni usi notevoli di questo operatore:



1: accedere a una variabile o funzione in uno spazio dei nomi diverso

UN spazio dei nomi viene utilizzato in C++ per raggruppare funzioni, classi e variabili correlate per evitare conflitti di denominazione. Quando definisci una variabile o una funzione all'interno di a spazio dei nomi , il nome della variabile o della funzione è visibile solo al suo interno spazio dei nomi .



In C++, puoi usare il operatore di risoluzione dell'ambito (::) insieme con il spazio dei nomi name e il nome della variabile o della funzione per accedere a una variabile o funzione definita in uno spazio dei nomi diverso. Ciò consente di accedere alla variabile o alla funzione da a spazio dei nomi diverso da quello in cui è stato creato.





Per comprendere il caso precedente, considera il seguente codice come esempio:

#include

utilizzando lo spazio dei nomi std ;

matematica dello spazio dei nomi {

cost Doppio PI = 3.14159 ;

Doppio piazza ( Doppio X ) {

ritorno X * X ;

}

}

int principale ( ) {

cout << 'Il valore di PI è: ' << matematica :: PI << finel ;

cout << 'Il quadrato di 5 è: ' << matematica :: piazza ( 5 ) << finel ;

ritorno 0 ;

}

Il codice precedente utilizza il spazio dei nomi matematico per accedere al 'PI' costante e 'piazza' funzione utilizzando il operatore di risoluzione dell'ambito '::' . Quindi stampa i valori sulla console.



Produzione

2: accesso alla variabile globale nel programma

Quando nel programma è presente lo stesso nome di variabili locali e globali, la variabile locale può nascondere quella globale. In tali situazioni, puoi usare il operatore di risoluzione dell'ambito (::) per accedere alla variabile globale. Questo operatore ci consente di fare riferimento esplicito alla variabile globale in base al suo ambito.

Ad esempio, nel codice riportato di seguito, abbiamo fatto riferimento alla variabile globale 'UN ‘ tramite il operatore di risoluzione dell'ambito(::) , dall'interno di una funzione in cui è stata definita una variabile locale con lo stesso nome:

#include

utilizzando lo spazio dei nomi std ;

int UN = quindici ;

int principale ( )

{

int UN = 35 ;

cout << 'Il valore della variabile globale a è' << :: UN << finel ;

cout << 'Il valore della variabile locale a è' << UN << finel ;

ritorno 0 ;

}

Nel codice precedente, la variabile presente al di fuori della funzione principale è the variabile globale e la variabile a all'interno della funzione principale è the variabile locale con lo stesso nome della variabile globale. Nell'istruzione cout, abbiamo utilizzato l'operatore di risoluzione dell'ambito per stampare la variabile globale UN .

Produzione

3: definire una funzione al di fuori della classe

In C++, puoi definire una funzione di classe al di fuori della definizione di classe e puoi farlo usando il file operatore di risoluzione dell'ambito (::) per specificare a quale classe appartiene la funzione. Ciò è necessario perché la funzione è definita al di fuori dell'ambito della classe.

Di seguito è riportato un codice di esempio che illustra questo utilizzo di operatore di risoluzione dell'ambito :

#include

utilizzando lo spazio dei nomi std ;



classe miaClasse {

pubblico :

vuoto funzione ( ) ;

} ;

vuoto la mia classe :: funzione ( ) {

cout << 'miafunzione() chiamata!' ;

}

int principale ( )

{

myClass classObg ;

classeOb. funzione ( ) ;

ritorno 0 ;

}

Nel codice precedente, la funzione membro miafunzione() è definito al di fuori della classe usando il operatore di risoluzione dell'ambito :: per specificarlo miafunzione() appartiene alla classe myClass.

Produzione

4: accesso ai membri statici della classe

In C++, quando c'è un membro statico e una variabile locale con lo stesso nome è presente all'interno della classe, il operatore di risoluzione dell'ambito (::) può essere utilizzato per accedere ai membri statici di una classe. Ciò consente al programma di distinguere tra la variabile locale e il membro statico.

Ecco un codice di esempio che mette in relazione l'uso di operatore di risoluzione dell'ambito per un caso del genere:

#include

utilizzando lo spazio dei nomi std ;

classe miaClasse {

pubblico :

statico int myStatVar ;

} ;

int la mia classe :: myStatVar = 5 ;

int principale ( ) {

int myStatVar = 10 ;

cout << 'Variabile locale myStatVar: ' << myStatVar << finel ;

cout << 'Variabile di classe myStatVar: ' << la mia classe :: myStatVar << finel ;

ritorno 0 ;

}

Il programma precedente definisce innanzitutto una classe la mia classe con una variabile membro statica myStatVar . Definisce quindi una variabile locale con lo stesso nome all'interno della funzione principale del programma. Per accedere alla variabile di classe, il operatore di risoluzione dell'ambito (::) viene utilizzato con il nome della classe la mia classe . Il programma restituisce il valore di entrambe le variabili alla console.

Produzione

5: Utilizzo con ereditarietà multiple

IL operatore di risoluzione dell'ambito (::) viene utilizzato anche per indicare quale versione di un membro utilizzare quando una classe C++ deriva da più classi padre che hanno variabili membro o funzioni con lo stesso nome. Possiamo distinguere tra varie versioni dello stesso membro utilizzando l'estensione operatore di risoluzione dell'ambito seguito dal nome della classe padre e dal nome del membro.

#include

utilizzando lo spazio dei nomi std ;

classe Genitore1 {

pubblico :

vuoto stampa ( ) {

cout << 'Questa è la funzione di stampa della classe Parent1.' << finel ;

}

} ;

classe Genitore2 {
pubblico :
vuoto stampa ( ) {
cout << 'Questa è la funzione di stampa della classe Parent2.' << finel ;
}
} ;
classe miaClasse : genitore pubblico1 , pubblico Genitore2 {
privato :
int nessuno ;

pubblico :
la mia classe ( int N ) {
nessuno = N ;
}
vuoto stampa ( ) {
Genitore1 :: stampa ( ) ; // chiama la funzione print di Parent1
Genitore2 :: stampa ( ) ; // chiama la funzione print di Parent2
cout << 'Il valore di num è: ' << nessuno << finel ; // stampa il valore di num
}
} ;
int principale ( ) {
myClass ogg ( 42 ) ; // crea un oggetto di MyClass con num inizializzato a 42
ogg. stampa ( ) ; // chiama la funzione print() dell'oggetto
ritorno 0 ;
}

Il programma di cui sopra dimostra l'uso di operatore di risoluzione dell'ambito (::) per distinguere tra le funzioni di stampa di Genitore1 E Genitore2 quando entrambe le classi sono ereditate da la mia classe. Chiamando le funzioni con il Classe genitori name che precede il nome della funzione, possiamo specificare quale versione della funzione utilizzare.

Produzione

Linea di fondo

IL operatore di risoluzione dell'ambito (::) è un componente vitale in C++ utilizzato per accedere ai nomi delle variabili su diversi livelli di ambito. L'operatore ha vari usi, tra cui l'accesso a una variabile o funzione in uno spazio dei nomi diverso, l'accesso a una variabile globale, la definizione di una funzione al di fuori della classe, l'accesso a membri statici di una classe e l'utilizzo di eredità multiple. Anche se può essere fonte di confusione per i nuovi sviluppatori, comprendere il operatore di risoluzione dell'ambito (::) è essenziale per una buona pratica di programmazione.