6. 静态成员函数

静态成员函数 是属于类的函数,他只能访问类的静态成员变量,不能访问对象的成员变量。

说明

  1. 静态成员函数没有 this 指针,不能访问对象的成员变量。
  2. 静态成员函数的作用域属于类。

静态成员函数的类内声明,类内实现的语法

class 类名{
   public:
      // 类内声明,类内实现。
      static 返回类型 函数名1(形式参数列表) { ... };
}

静态成员函数的类内声明,类外实现的语法

class 类名{
   public:
      // 类内声明。
      static 返回类型 函数名2(形式参数列表);
}

类外实现的语法

返回类型 类名::函数名2(形式参数列表) { ... }

调用的语法

// 借助于类名来调用
类名::函数名2(实际参数列表)
// 借助于该类的对象来调用
对象.函数名2(实际参数列表)

示例

// filename: static_member_func.c
#include <iostream>
#include <string>

using namespace std;

class Person {
    public:
        static int total_count; // 声明静态成员变量
        Person(const string & n, int a): name(n), age(a)  {
            cout << "创建:Person(" << n << ", " << a << ");\n";
            // 成员函数内使用静态成员变量
            total_count++;
        }
        ~Person(void) {
            cout << "析构:~Person(" << name << ", " << age << ");\n";
            total_count--;
        }
        // 静态成员函数
        static int getTotalCount(void); // 类内声明
    private:
        string name; // 姓名
        int age; // 年龄
};

// 定义静态成员变量
int Person::total_count = 0;

// 静态成员函数的类外实现
int Person::getTotalCount(void) {
    return total_count;
}

int main(int argc, char * argv[]) {
    Person p1("老魏", 35); 
    Person p2("魏明择", 35); 
    // 调用使用静态成员变量的方法 
    cout << "Person对象的个数:" << Person::getTotalCount() << endl;
    cout << "Person对象的个数:" << p2.getTotalCount() << endl;

    return 0;
}

编译和运行结果如下:

weimz@mzstudio:~$ g++ -o static_member_func static_member_func.cpp
weimz@mzstudio:~$ ./static_member_func 
创建:Person(老魏, 35);
创建:Person(魏明择, 35);
Person对象的个数:2
Person对象的个数:2
析构:~Person(魏明择, 35);
析构:~Person(老魏, 35);