C ++: Deklarieren von Funktionen Static Mitglied

Member-Funktionen können statisch in C ++ deklariert werden. Statische Member-Funktionen sind nützlich, wenn Sie eine Aktion zu einer Klasse zuordnen möchten, aber Sie müssen diese Aktion nicht mit einem bestimmten Objekt zugeordnet werden soll.

Zum Beispiel Funktion das Mitglied Ente :: fliegen () ist mit einem bestimmten zugehörigen Ente, während die eher drastischer Mitgliederfunktion Ente :: goExtinct () ist nicht.

Wie statische Datenelemente werden statische Elementfunktionen einer Klasse zugeordnet und nicht mit einem bestimmten Objekt dieser Klasse. Das bedeutet, dass, wie ein Verweis auf ein statisches Datenelement, ein Verweis auf eine statische Elementfunktion nicht ein Objekt erfordert. Wenn ein Objekt vorhanden ist, wird nur seine Art verwendet.

So ruft sowohl auf die statische Elementfunktion Nummer() Im folgenden Beispiel sind legal. Dieses Beispiel ist eine einfache statische Programm - ein Programm mit statischen Mitgliedern - CallStaticMember:

// CallStaticMember - zeigen zwei Möglichkeiten, um eine // statische Memberfunktion aufrufen // # include #einschließen #einschließen using namespace std-Klasse Schüler {public: Student (const char * pN = "no name"): sName (pN) {noOfStudents ++ -} ~ Student () {noOfStudents ---} const string name () {return sName-} static int number () {return noOfStudents-} geschützt: string sName-static int noOfStudents -} - int Studenten :: noOfStudents = 0-int main (int argcs, char * pargs []) { // zwei Studenten schaffen und die Klasse ", wie viele?", fragen Schüler s1 ( "Chester") - Student * pS2 = new Student ( "Scooter") - cout lt; lt; "Erstellt" lt; lt; s1.name () lt; lt; "Und" lt; lt; PS2-> name () lt; lt; Endl-cout lt; lt; "Anzahl der Studenten ist" lt; lt; s1.number () lt; lt; Endl - // jetzt bekommen von einem Schüler zu befreien und fragen againcout lt; lt; "Löschen" lt; lt; PS2-> name () lt; lt; Endl-löschen pS2-cout lt; lt; "Anzahl der Studenten ist" lt; lt; Student :: Nummer () lt; lt; Endl - // warten, bis der Benutzer bereit ist, bevor Programm beendet // dem Benutzer zu ermöglichen, das Programm resultscout zu sehen lt; lt; "Drücken Sie die Eingabetaste, um fortzufahren ..." lt; lt; Endl-cin.ignore (10, ' n') - cin.get () - Rückkehr 0-}

Dieses Programm erstellt zwei Schüler Objekte, ein lokal und ein aus dem Haufen. Es zeigt dann ihre Namen und die Zählung der Anzahl von Studenten. Als nächstes wird das Programm einer der Schüler löscht und fragt die Klasse, wie viele Studenten sind da draußen. Die Ausgabe von dem Programm erscheint, wie folgt:

Erstellt Chester und ScooterNumber von Studenten ist 2Deleting ScooterNumber von Studenten ist 1Drücken eine beliebige Taste, um fortzufahren ...

Diese Klasse hält seine Datenelemente geschützt und bietet Zugriff auf Funktionen, die außerhalb erlauben (Nicht-SchülerCode) zu lesen, aber nicht ändern.

Deklarieren der Rückgabetyp Name() Methode, um Schnur anstatt einfach Schnur bewirkt, dass die Funktion eine Referenz auf das Objekt die vorhandenen Namen nicht erstellen Sie eine temporäre String-Objekt zurück. das Hinzufügen der const auf die Erklärung hält bei geänderter Name Mitglied der Klasse der Anrufer.

Menü