6. 静态成员函数
静态成员函数 是属于类的函数,他只能访问类的静态成员变量,不能访问对象的成员变量。
说明
- 静态成员函数没有
this指针,不能访问对象的成员变量。 - 静态成员函数的作用域属于类。
静态成员函数的类内声明,类内实现的语法
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);