·Deklarieren Sie mit dem Schlüsselwort static
·Wenn die Datenelemente der deklarierten Klasse statisch sind, spielt es keine Rolle Wie viele werden erstellt? Für Objekte einer Klasse gibt es nur eine Kopie statischer Mitglieder
·Gemeinsam mit allen Objekten der Klasse, mit statischer Lebensdauer
·Wenn keine anderen Initialisierungsanweisungen vorhanden sind , das erste wird nach Object erstellt, alle statischen Datenelemente werden auf Null initialisiert
· Außerhalb der Klasse definiert und initialisiert, verwenden Sie den Bereichsauflösungsoperator (::), um die Klasse anzugeben, zu der es gehört
Beispiel:
#include <iostream> using namespace std; class Box { public: static int count; //若该静态数据成员在private部分声明,则只能通过静态成员函数处理 Box(double l = 2.0, double b = 2.0, double h = 2.0) { cout << "One constructor was called." << endl; length = l, width = b, height = h; count++; //每创建一个对象时加1 } double Volume() { return length * width * height; } ~Box() { count--; } private: double length, width, height; }; //初始化类Box的静态成员 int Box::count = 0; int main(void) { Box Box1(3.3, 1.2, 1.5); Box Box2(8.5, 6.0, 2.0); cout << "Total objects: " << Box::count << endl; //输出对象的总数 return 0; }
Die Deklaration der Mitgliedsfunktion als statisch kann die Funktion von jedem spezifischen Objekt der Klasse trennen
·Kann auch aufgerufen werden, wenn das Klassenobjekt nicht existiert. Verwenden Sie den Klassennamen plus den Bereichsauflösungsoperator ::, um auf
·Statische Mitgliedsfunktionen zuzugreifen Greifen Sie nur auf statische Mitgliedsdaten, andere statische Mitgliedsfunktionen und andere Funktionen außerhalb der Klasse zu.
·Statische Mitgliedsfunktionen haben einen Klassenbereich und können nicht auf diesen Zeiger der Klasse zugreifen Objekte der Klasse wurden erstellt
·Um auf nicht statische Mitglieder mithilfe statischer Mitgliedsfunktionen zuzugreifen, müssen Sie das Objekt
übergeben. Beispiel:
#include <iostream> using namespace std; class Box { public: static int count; Box(double l = 2.0, double b = 2.0, double h = 2.0) { cout <<"One constructor was called." << endl; length = l, width = b, height = h; count++; } double Volume() { return length * width * height; } static int getCount() { //静态成员函数 return count; } private: double length, width, height; }; int Box::count = 0; int main(void) { //在创建对象之前输出对象的总数 cout << "Inital Stage Count: " << Box::getCount() << endl; Box Box1(3.3, 1.2, 1.5); Box Box2(8.5, 6.0, 2.0); //在创建对象之后输出对象的总数 cout << "Final Stage Count: " << Box::getCount() << endl; return 0; }
Hinweis:
Der Unterschied zwischen statischen Mitgliedsfunktionen und gewöhnlichen Mitgliedsfunktionen:
·Statische Mitgliedsfunktionen haben keine Diese Zeiger können nur auf statische Mitglieder zugreifen (einschließlich statischer Mitgliedsvariablen und statischer Mitgliedsfunktionen). diesen Zeiger nicht haben
Verwenden Sie statische Member, um den Aufruf von Konstruktoren und Destruktoren zu verstehen
#include <iostream> using namespace std; class A { friend class B; //类B是类A的友元 public: static int value; static int num; A(int x, int y) { xp = x, yp = y; value++; cout << "调用构造:" << value << endl; } void displayA() { cout << xp << "," << yp << endl; } ~A() { num++; cout << "调用析构:" << num << endl; } private: int xp, yp; }; class B { public: B(int x1, int x2) : mpt1(x1 + 2, x2 - 2), mpt2(x1, x2) { cout << "调用构造\n"; //mpt是类A的对象,有几个mpt,有关类A的操作便执行几次 } void set(int m, int n); void displayB(); ~B() { cout << "调用析构\n"; //析构函数在类结束前调用,类结束的时候释放类申请的空间 } private: A mpt1, mpt2; //将A类的对象声明为B类的私有数据成员 }; int A::value = 0; int A::num = 0; void B::set(int m, int n) { mpt1.xp = m * 2, mpt1.yp = n / 2; } void B::displayB() { mpt1.displayA(); } int main() { B p(10, 20); cout << "Hello world!" << endl; B displayB(); //通过友元,使类B输出类A的私有数据成员 return 0; }
Verwandte Artikel:
Die Verwendung von statischen C++-Mitgliedern und konstanten MitgliedernDas obige ist der detaillierte Inhalt vonStatische Datenelemente und statische Elementfunktionen von C++-Klassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!