C++ 类的静态成员

  • 类的静态成员

    我们可以使用static关键字定义static类。当我们将一个类的成员声明为静态成员时,这意味着无论创建了多少个该类的对象,静态成员只有一个副本。该类的所有对象共享一个静态成员。如果没有其他初始化,则在创建第一个对象时,所有静态数据都将初始化为零。我们不能将其放在类定义中,但是可以按照以下示例中的说明在类外部进行初始化,方法是使用范围解析运算符::来重新声明静态变量,以标识它属于哪个类。让我们尝试以下示例以了解静态数据成员的概念-
    
    #include <iostream>
     
    using namespace std;
    
    class Box {
       public:
          static int objectCount;
          
          // Constructor definition
          Box(double l = 2.0, double b = 2.0, double h = 2.0) {
             cout <<"Constructor called." << endl;
             length = l;
             breadth = b;
             height = h;
             
             // Increase every time object is created
             objectCount++;
          }
          double Volume() {
             return length * breadth * height;
          }
          
       private:
          double length;     // Length of a box
          double breadth;    // Breadth of a box
          double height;     // Height of a box
    };
    
    // Initialize static member of class Box
    int Box::objectCount = 0;
    
    int main(void) {
       Box Box1(3.3, 1.2, 1.5);    // Declare box1
       Box Box2(8.5, 6.0, 2.0);    // Declare box2
    
       // Print total number of objects.
       cout << "Total objects: " << Box::objectCount << endl;
    
       return 0;
    }
    
    尝试一下
    编译并执行上述代码后,将产生以下结果-
    
    Constructor called.
    Constructor called.
    Total objects: 2
    
  • 静态函数成员

    通过将函数成员声明为静态成员,可以使其独立于类的任何特定对象。即使没有阶级的存在和对象的静态成员函数可以被称为静态函数只使用类名和范围解析运算符::访问。静态成员函数只能从类外部访问静态数据成员,其他静态成员函数和任何其他函数。静态成员函数具有类作用域,并且不能访问该类的this指针。您可以使用静态成员函数来确定是否已创建该类的某些对象。让我们尝试以下示例以了解静态函数成员的概念-
    
    #include <iostream>
     
    using namespace std;
    
    class Box {
       public:
          static int objectCount;
          
          // Constructor definition
          Box(double l = 2.0, double b = 2.0, double h = 2.0) {
             cout <<"Constructor called." << endl;
             length = l;
             breadth = b;
             height = h;
    
             // Increase every time object is created
             objectCount++;
          }
          double Volume() {
             return length * breadth * height;
          }
          static int getCount() {
             return objectCount;
          }
          
       private:
          double length;     // Length of a box
          double breadth;    // Breadth of a box
          double height;     // Height of a box
    };
    
    // Initialize static member of class Box
    int Box::objectCount = 0;
    
    int main(void) {
       // Print total number of objects before creating object.
       cout << "Inital Stage Count: " << Box::getCount() << endl;
    
       Box Box1(3.3, 1.2, 1.5);    // Declare box1
       Box Box2(8.5, 6.0, 2.0);    // Declare box2
    
       // Print total number of objects after creating object.
       cout << "Final Stage Count: " << Box::getCount() << endl;
    
       return 0;
    }
    
    尝试一下
    编译并执行上述代码后,将产生以下结果-
    
    Inital Stage Count: 0
    Constructor called.
    Constructor called.
    Final Stage Count: 2