Funzione membro statico in C++ (Esempi)

Cos'รจ una funzione statica? C++?

In C++ classi, un membro statico รจ un membro della classe che appartiene alla classe anzichรฉ ai suoi oggetti. Avrai solo una copia dell'iscrizione. Questo รจ il caso indipendentemente dal numero di oggetti creati.

Quando una funzione di classe รจ definita come statica, tutti gli oggetti di classe condividono un membro di classe statico. รˆ quindi possibile accedere alla funzione statica senza creare oggetti di classe e diventarne indipendente oggetti di classe. Un membro dati statico in C++ puรฒ accedere ad altre funzioni statiche, solo all'esterno della classe.

Perchรฉ utilizzare le funzioni statiche?

a differenza di C++ funzioni globali, le funzioni statiche sono accessibili solo dal file di dichiarazione. Se รจ necessario limitare l'accesso a una funzione, renderla statica.

Utilizzare una funzione statica per limitare il riutilizzo dello stesso nome di funzione in un altro file.

Definizione di funzioni statiche in C++

Sintassi:

static int myfunc(void)
{
    cout("Example of C++ static function ");
}

Nell'esempio sopra, stiamo definendo una funzione statica denominata myfunc. Notare l'uso della parola chiave static nella definizione. La parola chiave viene prima del nome della funzione.

Funzione membro statico in C++

Quando un membro della funzione viene dichiarato statico, diventa indipendente dagli altri oggetti della classe. รˆ possibile chiamare una funzione membro statica anche se non esistono altri oggetti di classe.

Per accedere ai nomi delle classi, รจ necessario utilizzare il nome della classe e l'operatore di risoluzione dell'ambito (::). Una funzione statica puรฒ accedere solo ad altre funzioni statiche, membri dati statici e altre funzioni esterne alla classe. L'ambito delle funzioni membro statiche si trova all'interno della classe e non possono accedere a questo puntatore di classe.

esempio 1

#include<iostream>
using namespace std;
class BoxClass {
public:
	static int count;
	BoxClass(double l = 2.0, double b = 2.0, double h = 2.0) {
		cout << "Class constructor called." << endl;
		length = l;
		breadth = b;
		height = h;
		count++;
	}
	double getVolume() {
		return length * breadth * height;
	}
	static int getCount() {
		return count;
	}
private:
	double length;     
	double breadth;    
	double height;     
};
int BoxClass::count = 0;
int main(void) {
	cout << "Inital value of count is : " << BoxClass::getCount() << endl;
	BoxClass Box1(3.2, 1.4, 1.8);    
	BoxClass Box2(7.5, 4.0, 4.0);   
	cout << "Final value of count is : " << BoxClass::getCount() << endl;
	return 0;
}

Produzione:

Funzione membro statica

Ecco uno screenshot del codice:

Funzione membro statica

Spiegazione del codice:

  1. Includendo il file di intestazione iostream nel nostro C++ programma per usarlo funzioni.
  2. Includere lo spazio dei nomi std nel codice per utilizzare le sue classi senza chiamarlo.
  3. Crea una classe denominata BoxClasse.
  4. Utilizza il modificatore di accesso pubblico per contrassegnare un membro della classe che รจ accessibile pubblicamente.
  5. Dichiarano un membro della classe statica denominato count.
  6. Utilizzare un costruttore di classe per inizializzare tre variabili di tipo double.
  7. Stampa del testo sulla console. La funzione endl (fine riga) sposta il cursore del mouse nella riga successiva.
  8. Inizializza il valore di l su lunghezza variabile.
  9. Inizializza il valore di b sull'ampiezza variabile.
  10. Inizializza il valore di h ad altezza variabile.
  11. Quindi aumentare il valore della variabile count di 1 ogni volta che viene creato un nuovo oggetto.
  12. Fine del corpo del costruttore.
  13. Creare una funzione denominata doublevolume().
  14. Definisci cosa restituirร  la funzione doubleVolume(). Dovrebbe restituire la moltiplicazione delle variabili lunghezza, larghezza e altezza.
  15. Fine del corpo della funzione doubleVolume().
  16. Dichiarare una funzione statica denominata getCount().
  17. La funzione getCount() dovrebbe restituire il valore della variabile count.
  18. Fine del corpo della funzione getCount().
  19. Utilizza il modificatore di accesso privato per contrassegnare un membro della classe come accessibile pubblicamente.
  20. Dichiarare un membro di classe denominato length di un tipo di dati double. Sarร  accessibile privatamente.
  21. Dichiara un altro membro della classe denominato breadth di un tipo di dati double. Sarร  accessibile privatamente.
  22. Dichiara un membro di classe denominato altezza di tipo dati double. Sarร  accessibile privatamente.
  23. Fine del corpo del BoxClasse di classe.
  24. Quindi inizializza un membro statico di BoxClasse di classe.
  25. Chiamando la funzione main(). IL C++ la logica del programma dovrebbe essere aggiunta al corpo di quella funzione.
  26. Stampa del testo sulla console indicando il numero corrente di oggetti prima che vengano creati nuovi oggetti.
  27. Dichiarare un oggetto denominato Box1, che รจ una delle istanze della classe BoxClasse. I valori di larghezza, lunghezza e altezza devono essere specificati tra parentesi.
  28. Dichiarare un oggetto denominato Box2, che รจ un'istanza della classe BoxClasse. I valori di larghezza, lunghezza e altezza sono stati specificati tra parentesi.
  29. Stampa del testo sulla console indicando il numero corrente di oggetti dopo la creazione di nuovi oggetti.
  30. Migliori C++ Programma deve restituire valore in caso di completamento positivo.
  31. Fine del corpo della funzione main().

Accesso alle funzioni statiche

Non รจ necessario creare un oggetto classe per accedere a una funzione statica. รˆ invece possibile utilizzare il nome della classe e l'operatore di risoluzione dell'ambito (::).

Sintassi:

className::funcName

Sopra, className รจ il nome della classe in cui รจ stata definita la funzione statica. Il funcName รจ il nome assegnato alla funzione statica.

esempio 2

#include<iostream> 
using namespace std;
class MyClass {
public:
	static void msgFunc() {
		cout << "Welcome to Guru99!";
	}
};
int main() {
	MyClass::msgFunc();
}

Produzione:

Accesso alle funzioni statiche

Ecco uno screenshot del codice:

Accesso alle funzioni statiche

Spiegazione del codice:

  1. Includere il file header iostream nel nostro programma per utilizzare le sue funzioni.
  2. Includi lo spazio dei nomi std nel tuo codice per utilizzare le sue classi senza chiamarlo.
  3. Crea una classe denominata MyClass.
  4. Utilizza il modificatore di accesso pubblico per contrassegnare un membro della classe come accessibile pubblicamente.
  5. Dichiarare una funzione statica denominata msgFunc(). La parola chiave static rende la funzione statica.
  6. Specificare il testo da stampare sulla console una volta chiamata/invocata la funzione di cui sopra.
  7. Fine del corpo della funzione msgFunc().
  8. Termina il corpo della classe.
  9. Chiamando la funzione main().
  10. Chiama la funzione statica denominata msgFunc().
  11. Fine del corpo della funzione main().

Accesso alle variabili statiche

Le variabili statiche appartengono a una classe piuttosto che a oggetti di classe. Se una variabile statica รจ pubblica, รจ accessibile utilizzando il nome della classe e l'operatore di risoluzione dell'ambito. Tuttavia, ciรฒ non รจ possibile se un membro statico รจ privato.

Normalmente, l'accesso alle variabili private avviene tramite funzioni pubbliche. Tuttavia, รจ necessario creare un'istanza/oggetto di classe. La soluzione รจ utilizzare una funzione statica.

Esempio 3: variabile statica in C++ classe

#include<iostream> 
using namespace std;
class AClass {
private:
	static int myvar;
public:
	static int getVar() { 
		return myvar; 
		} 
};
int AClass::myvar = 23; 
int main() {
	cout <<"The value of myvar is: "<< AClass::getVar() << '\n';
}

Produzione:

Accesso alle variabili statiche

Ecco uno screenshot del codice:

Accesso alle variabili statiche

Spiegazione del codice:

  1. Incluso il file header iostream nel nostro programma.
  2. Includere lo spazio dei nomi std in questo programma per utilizzare le sue classi senza chiamare.
  3. Crea una classe denominata AClass.
  4. Utilizzare il modificatore di accesso privato per rendere la variabile myvar accessibile privatamente.
  5. Crea una variabile intera statica denominata myvar.
  6. Utilizza il modificatore di accesso pubblico che contrassegna la funzione getVar() come accessibile pubblicamente.
  7. Creazione di una funzione statica denominata getVar().
  8. La funzione getVar() dovrebbe essere in grado di restituire il valore della variabile myvar.
  9. Fine del corpo della funzione getVar().
  10. Fine del corpo della classe AClass.
  11. Assegnare alla variabile myvar il valore 23. Per questo abbiamo utilizzato il nome della classe e l'operatore di risoluzione dell'ambito.
  12. Chiamando la funzione main().
  13. Stampa il valore della variabile myVar sulla console insieme ad altro testo. Abbiamo utilizzato il nome della classe, la funzione statica e l'operatore di risoluzione dell'ambito per accedere al valore di questa variabile.
  14. La fine del corpo della funzione main().

questo puntatore in funzioni statiche

Una funzione statica non รจ collegata a un oggetto. Questo รจ il motivo per cui le funzioni statiche non hanno questo puntatore. Il puntatore di un oggetto solitamente punta all'oggetto su cui sta attualmente lavorando. Poichรฉ le funzioni statiche non funzionano con gli oggetti, non รจ necessario questo puntatore.

Le funzioni statiche hanno accesso diretto ad altri membri statici. Tuttavia, questo non รจ il caso dei membri non statici. Il motivo รจ che i membri non statici devono appartenere a un oggetto, ma le funzioni statiche non hanno oggetti con cui lavorare.

esempio 4

รˆ possibile definire una funzione statica al di fuori della dichiarazione della classe. Dimostriamolo:

#include<iostream> 
using namespace std;
class NumGenerator {
private:
	static int nextNum; 
public:
	static int getNextNum();
};
int NumGenerator::nextNum = 1;
int NumGenerator::getNextNum() {
	return nextNum++; 
}
int main() {
	for (int count = 0; count < 5; ++count)
		std::cout << "The next number is: " << NumGenerator::getNextNum() << '\n';
	return 0;
}

Produzione:

questo puntatore in funzioni statiche

Ecco uno screenshot del tuo codice:

questo puntatore in funzioni statiche

Spiegazione del codice:

  1. Includere il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
  2. Includi lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
  3. Crea una classe denominata NumGenerator.
  4. Utilizzando il modificatore di accesso privato per contrassegnare la variabile, stiamo per crearla come accessibile privatamente.
  5. Crea una variabile intera statica denominata nextNum.
  6. Utilizzando il modificatore di accesso pubblico che ti aiuta a contrassegnare la variabile che stiamo per creare come accessibile pubblicamente.
  7. Dichiarare una funzione statica denominata getNextNum().
  8. Fine del corpo della classe.
  9. Assegna alla variabile nextNum il valore 1. Lo abbiamo fatto utilizzando il nome della classe, il nome della variabile e l'operatore di risoluzione dell'ambito.
  10. Definizione della funzione statica getNextNum() all'esterno della classe.
  11. Specificare l'azione da intraprendere quando viene chiamata/invocata la funzione di cui sopra. Incrementerร  il valore della variabile nextNum di 1.
  12. Fine della definizione della funzione getNextNum().
  13. Chiamando la funzione main(). IL C++ la logica del programma dovrebbe essere aggiunta al corpo di questa funzione.
  14. Utilizzare per loop per creare una variabile denominata count. Il valore di questa variabile dovrebbe aumentare da 0 a 4. Dopo ogni iterazione, il valore della variabile aumenterร  di 1.
  15. Stampa del valore della variabile nextNum insieme ad altro testo sulla console ad ogni iterazione. Si accede al valore utilizzando la funzione getNextNum().
  16. Questo C++ il programma deve restituire un valore in caso di completamento positivo.
  17. Fine della funzione main().

Sintesi

  • C++ i membri statici sono membri della classe che appartengono alla classe anzichรฉ ai suoi oggetti.
  • Avrai solo una copia di un membro statico indipendentemente dal numero di oggetti che crei.
  • Tutti gli oggetti della classe condividono ciascun membro della classe statica.
  • Dopo aver definito una funzione di classe come statica, diventa indipendente dagli oggetti della classe.
  • รˆ possibile accedere a una funzione statica anche se non si crea alcun oggetto di classe.
  • Tuttavia, le funzioni statiche non hanno questo oggetto, che punta a oggetti di classe.

Riassumi questo post con: