Statische Memberfunktion in C++ (Beispiele)

Was ist eine statische Funktion in C++?

In C++ Klassen, ein statisches Mitglied ist ein Klassenmitglied, das zur Klasse gehรถrt und nicht zu ihren Objekten. Sie haben nur eine Kopie der Mitgliedschaft. Dies gilt unabhรคngig von der Anzahl der Objekte, die Sie erstellen.

Wenn eine Klassenfunktion als statisch definiert ist, teilen sich alle Klassenobjekte ein statisches Klassenmitglied. Auf die statische Funktion kann daher zugegriffen werden, ohne dass Klassenobjekte erstellt werden mรผssen, und wird unabhรคngig von Klassenobjekte. Ein statisches Datenelement in C++ kann nur auf andere statische Funktionen auรŸerhalb der Klasse zugreifen.

Warum statische Funktionen verwenden?

Im Gegensatz zu C++ Globale Funktionen, statische Funktionen sind nur von der Deklarationsdatei aus zugรคnglich. Wenn der Zugriff auf eine Funktion eingeschrรคnkt werden muss, machen Sie sie statisch.

Verwenden Sie eine statische Funktion, um die Wiederverwendung desselben Funktionsnamens in einer anderen Datei einzuschrรคnken.

Definieren statischer Funktionen in C++

Syntax:

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

Im obigen Beispiel definieren wir eine statische Funktion namens myfunc. Beachten Sie die Verwendung des Schlรผsselworts static in der Definition. Das Schlรผsselwort steht vor dem Funktionsnamen.

Statische Memberfunktion in C++

Wenn ein Funktionsmember als statisch deklariert wird, wird er unabhรคngig von anderen Objekten in der Klasse. Sie kรถnnen eine statische Memberfunktion auch dann aufrufen, wenn keine anderen Klassenobjekte vorhanden sind.

Um auf Klassennamen zuzugreifen, sollten Sie den Namen der Klasse und den Bereichsauflรถsungsoperator verwenden (::). Eine statische Funktion kann nur auf andere statische Funktionen, statische Datenelemente und andere Funktionen auรŸerhalb der Klasse zugreifen. Der Umfang statischer Memberfunktionen liegt innerhalb der Klasse und sie kรถnnen nicht auf diesen Klassenzeiger zugreifen.

Beispiel 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;
}

Ausgang:

Statische Memberfunktion

Hier ist ein Screenshot des Codes:

Statische Memberfunktion

Code Erlรคuterung:

  1. Einbinden der iostream Headerdatei in unsere C++ Programm zur Nutzung seiner Funktionen.
  2. Fรผgen Sie den std-Namespace in den Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  3. Erstellen Sie eine Klasse mit dem Namen BoxKlasse.
  4. Verwenden Sie den Modifikator fรผr den รถffentlichen Zugriff, um ein Klassenmitglied zu markieren, das รถffentlich zugรคnglich ist.
  5. Sie deklarieren ein statisches Klassenmitglied mit dem Namen count.
  6. Verwenden Sie einen Klassenkonstruktor, um drei Variablen eines Double-Typs zu initialisieren.
  7. Drucken Sie einen Text auf der Konsole. Die Funktion endl (Zeile beenden) bewegt den Mauszeiger in die nรคchste Zeile.
  8. Initialisieren Sie den Wert von l auf eine variable Lรคnge.
  9. Initialisieren Sie den Wert von b auf eine variable Breite.
  10. Initialisieren Sie den Wert von h auf eine variable Hรถhe.
  11. Erhรถhen Sie dann den Wert der Variablen count jedes Mal um 1, wenn ein neues Objekt erstellt wird.
  12. Ende des Konstruktorkรถrpers.
  13. Erstellen Sie eine Funktion mit dem Namen doublevolume().
  14. Definieren Sie, was die Funktion doubleVolume() zurรผckgeben soll. Sie sollte die Multiplikation der Variablen Lรคnge, Breite und Hรถhe zurรผckgeben.
  15. Ende des Funktionskรถrpers von doubleVolume().
  16. Deklarieren Sie eine statische Funktion mit dem Namen getCount().
  17. Die Funktion getCount() sollte den Wert der Zรคhlvariablen zurรผckgeben.
  18. Ende des Hauptteils der getCount()-Funktion.
  19. Verwenden Sie den privaten Zugriffsmodifikator, um ein Klassenmitglied als รถffentlich zugรคnglich zu markieren.
  20. Deklarieren eines Klassenmitglieds mit dem Namen โ€žLรคngeโ€œ eines doppelten Datentyps. Es wird privat zugรคnglich sein.
  21. Deklarieren Sie ein weiteres Klassenmitglied mit dem Namen width eines doppelten Datentyps. Es wird privat zugรคnglich sein.
  22. Deklarieren eines Klassenmitglieds mit dem Namen โ€žheightโ€œ vom Datentyp โ€ždoubleโ€œ. Es wird privat zugรคnglich sein.
  23. Ende des Kรถrpers des BoxKlasse Klasse.
  24. Dann initialisieren Sie ein statisches Mitglied von BoxKlasse Klasse.
  25. Aufruf der Funktion main(). Die C++ Die Programmlogik sollte innerhalb des Hauptteils dieser Funktion hinzugefรผgt werden.
  26. Geben Sie auf der Konsole einen Text aus, der die aktuelle Anzahl der Objekte angibt, bevor neue Objekte erstellt werden.
  27. Deklarieren Sie ein Objekt mit dem Namen Box1, die eine der Instanzen der Klasse ist BoxKlasse. Die Breiten-, Lรคngen- und Hรถhenwerte sollten in Klammern angegeben werden.
  28. Deklarieren Sie ein Objekt mit dem Namen Box2, eine Instanz der Klasse BoxKlasse. Die Breiten-, Lรคngen- und Hรถhenwerte wurden in Klammern angegeben.
  29. Geben Sie auf der Konsole einen Text aus, der die aktuelle Anzahl der Objekte nach der Erstellung neuer Objekte angibt.
  30. Das C++ Programm muss nach erfolgreichem Abschluss einen Wert zurรผckgeben.
  31. Ende des Hauptteils der Funktion main().

Zugriff auf statische Funktionen

Sie mรผssen kein Klassenobjekt erstellen, um auf eine statische Funktion zuzugreifen. Stattdessen kรถnnen Sie den Klassennamen und den Bereichsauflรถsungsoperator verwenden. (::).

Syntax:

className::funcName

Oben ist der Klassenname der Name der Klasse, in der die statische Funktion definiert wurde. Der funcName ist der Name, der der statischen Funktion zugewiesen ist.

Beispiel 2

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

Ausgang:

Zugriff auf statische Funktionen

Hier ist ein Screenshot des Codes:

Zugriff auf statische Funktionen

Code Erlรคuterung:

  1. Einbindung der iostream-Header-Datei in unser Programm, um deren Funktionen zu nutzen.
  2. Fรผgen Sie den std-Namespace in Ihren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  3. Erstellen Sie eine Klasse mit dem Namen MyClass.
  4. Verwenden Sie den Modifikator fรผr den รถffentlichen Zugriff, um ein Klassenmitglied als รถffentlich zugรคnglich zu markieren.
  5. Deklarieren einer statischen Funktion namens msgFunc(). Das Schlรผsselwort static macht die Funktion statisch.
  6. Geben Sie den Text an, der auf der Konsole gedruckt werden soll, sobald die obige Funktion aufgerufen/aufgerufen wird.
  7. Ende des Hauptteils der msgFunc()-Funktion.
  8. Beenden Sie den Hauptteil der Klasse.
  9. Aufruf der Funktion main().
  10. Rufen Sie die statische Funktion mit dem Namen msgFunc() auf.
  11. Ende des Hauptteils der Funktion main().

Zugriff auf statische Variablen

Statische Variablen gehรถren zu einer Klasse und nicht zu Klassenobjekten. Wenn eine statische Variable รถffentlich ist, kann รผber den Klassennamen und den Bereichsauflรถsungsoperator darauf zugegriffen werden. Dies ist jedoch nicht mรถglich, wenn ein statisches Mitglied privat ist.

Normalerweise wird auf private Variablen รผber รถffentliche Funktionen zugegriffen. Es muss jedoch eine Klasseninstanz/ein Klassenobjekt erstellt werden. Die Lรถsung besteht darin, eine statische Funktion zu verwenden.

Beispiel 3: Statische Variable in C++ Klasse

#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';
}

Ausgang:

Zugriff auf statische Variablen

Hier ist ein Screenshot des Codes:

Zugriff auf statische Variablen

Code Erlรคuterung:

  1. Einbinden der iostream-Header-Datei in unser Programm.
  2. Fรผgen Sie den std-Namespace in dieses Programm ein, um seine Klassen ohne Aufruf zu verwenden.
  3. Erstellen Sie eine Klasse mit dem Namen AClass.
  4. Verwenden Sie den privaten Zugriffsmodifikator, um die Variable myvar privat zugรคnglich zu machen.
  5. Erstellen Sie eine statische Ganzzahlvariable mit dem Namen myvar.
  6. Verwenden Sie den รถffentlichen Zugriffsmodifikator, der die Funktion getVar() als รถffentlich zugรคnglich markiert.
  7. Erstellen einer statischen Funktion namens getVar().
  8. Die Funktion getVar() sollte in der Lage sein, den Wert der Variablen myvar zurรผckzugeben.
  9. Ende des Hauptteils der Funktion getVar().
  10. Ende des Rumpfes der Klasse AClass.
  11. Weisen Sie der Variablen myvar den Wert 23 zu. Wir haben hierfรผr den Klassennamen und den Bereichsauflรถsungsoperator verwendet.
  12. Aufruf der Funktion main().
  13. Drucken Sie den Wert der Variable myVar zusammen mit anderem Text auf der Konsole. Wir haben den Klassennamen, die statische Funktion und den Bereichsauflรถsungsoperator verwendet, um auf den Wert dieser Variable zuzugreifen.
  14. Das Ende des main()-Funktionskรถrpers.

dieser Zeiger in statischen Funktionen

Eine statische Funktion ist keinem Objekt zugeordnet. Deshalb haben statische Funktionen diesen Zeiger nicht. Der Zeiger eines Objekts zeigt normalerweise auf das Objekt, an dem es gerade arbeitet. Da statische Funktionen nicht mit Objekten funktionieren, ist dieser Zeiger nicht erforderlich.

Statische Funktionen haben direkten Zugriff auf andere statische Mitglieder. Dies ist jedoch bei nicht statischen Elementen nicht der Fall. Der Grund dafรผr ist, dass nicht-statische Mitglieder zu einem Objekt gehรถren mรผssen, statische Funktionen jedoch keine Objekte haben, mit denen sie arbeiten kรถnnen.

Beispiel 4

Es ist mรถglich, eine statische Funktion auรŸerhalb der Klassendeklaration zu definieren. Lassen Sie uns das demonstrieren:

#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;
}

Ausgang:

dieser Zeiger in statischen Funktionen

Hier ist ein Screenshot Ihres Codes:

dieser Zeiger in statischen Funktionen

Code Erlรคuterung:

  1. Einbinden der iostream-Header-Datei in unseren Code, um ihre Funktionen zu nutzen.
  2. Fรผgen Sie den std-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  3. Erstellen Sie eine Klasse mit dem Namen NumGenerator.
  4. Mit dem privaten Zugriffsmodifikator markieren wir die Variable und erstellen sie als privat zugรคnglich.
  5. Erstellen Sie eine statische Ganzzahlvariable mit dem Namen nextNum.
  6. Verwenden Sie den Modifikator fรผr den รถffentlichen Zugriff, der Ihnen hilft, die Variable, die wir erstellen mรถchten, als รถffentlich zugรคnglich zu markieren.
  7. Deklarieren einer statischen Funktion namens getNextNum().
  8. Ende des Unterrichtskรถrpers.
  9. Weisen Sie der Variablen nextNum den Wert 1 zu. Wir haben dies mithilfe des Klassennamens, des Variablennamens und des Bereichsauflรถsungsoperators getan.
  10. Definieren der statischen Funktion getNextNum() auรŸerhalb der Klasse.
  11. Geben Sie die Aktion an, die ausgefรผhrt werden soll, wenn die obige Funktion aufgerufen/aufgerufen wird. Dadurch wird der Wert der Variablen nextNum um 1 erhรถht.
  12. Ende der Definition der Funktion getNextNum().
  13. Aufruf der Funktion main(). Die C++ Die Programmlogik sollte innerhalb des Hauptteils dieser Funktion hinzugefรผgt werden.
  14. Verwenden for-Schleife um eine Variable mit dem Namen count zu erstellen. Der Wert dieser Variablen sollte von 0 auf 4 steigen. Nach jeder Iteration erhรถht sich der Wert der Variablen um 1.
  15. Drucken des Werts der Variablen nextNum zusammen mit anderem Text auf der Konsole bei jeder Iteration. Der Zugriff auf den Wert erfolgt รผber die Funktion getNextNum().
  16. Dieser C++ Das Programm muss nach erfolgreichem Abschluss einen Wert zurรผckgeben.
  17. Ende der main()-Funktion.

Zusammenfassung

  • C++ Statische Mitglieder sind Klassenmitglieder, die zur Klasse und nicht zu ihren Objekten gehรถren.
  • Sie verfรผgen nur รผber eine Kopie eines statischen Mitglieds, unabhรคngig von der Anzahl der von Ihnen erstellten Objekte.
  • Alle Klassenobjekte teilen sich jedes statische Klassenmitglied.
  • Nachdem eine Klassenfunktion als statisch definiert wurde, wird sie unabhรคngig von den Klassenobjekten.
  • Auf eine statische Funktion kann auch dann zugegriffen werden, wenn Sie kein Klassenobjekt erstellen.
  • Statische Funktionen verfรผgen jedoch nicht รผber dieses Objekt, das auf Klassenobjekte verweist.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: