C++ 类的静态成员方法的需要使用 static 来修饰,且 C++ 类的静态成员方法与 静态成员变量 类似,静态成员方法不属于任何对象,只属于类。同时,C++ 的静态成员函数只能访问静态成员。
编译器在编译一个普通成员函数时,会隐式地增加一个形参 this,并把当前对象的地址赋值给 this,所以普通成员函数只能在创建对象后通过对象来调用,因为它需要当前对象的地址。
而静态成员函数可以通过类来直接调用,编译器不会为它增加形参 this,它不需要当前对象的地址,所以不管有没有创建对象,都可以调用静态成员函数。
class ClassName
{
public:
static Type funcName(paramterType paramter)
{
}
};
参数 | 描述 |
---|---|
static | 定义静态成员方法使用的关键字。 |
Type | 静态成员方法的返回值类型。 |
funcName | 静态成员方法名。 |
paramterType | 静态成员方法参数类型。 |
paramter | 静态成员方法形参。 |
我们在 ClassName 类里面,定义了一个静态成员方法 funcName。
C++ 的静态方法调用方法有两种,一种是通过 “类名::方法名” 的方法来调用,另一种是通过 “对象.方法名” 的方法来调用。
ClassName::funcName(params)
参数 | 描述 |
---|---|
ClassName | 类。 |
funcName | 静态成员方法。 |
params | 参数。 |
通过 “类名::方法名” 的方法,调用静态方法。
instance.funcName(params)
参数 | 描述 |
---|---|
instance | 类的实例。 |
funcName | 类方法。 |
params | 参数。 |
通过 “对象.方法名” 的方法,调用静态方法。
通过对象访问类静态方法
#include <iostream>
using namespace std;
class Student
{
public:
Student()
{
}
static void sayHello()
{
cout << "Hello, I am student" << endl;
}
};
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
Student stu;
stu.sayHello();
return 0;
}
程序运行后,控制台输出如下:
我们创建了一个类 Student,接着,为该类添加了一个静态成员方法 sayHello,其中类静态方法必须使用 static 修饰,最后,我们使用 “对象.类静态方法” 的形式调用类静态成员方法。
通过类访问类静态方法
#include <iostream>
using namespace std;
class Student
{
public:
Student()
{
}
static void sayHello()
{
cout << "Hello, I am student" << endl;
}
};
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
Student::sayHello();
return 0;
}
程序运行后,控制台输出如下:
这次,我们使用了 “类名::静态方法” 的形式访问了类的静态成员函数。
C++ 类的静态成员方法的需要使用 static 来修饰,且 C++ 类的静态成员方法与静态成员变量类似,静态成员方法不属于任何对象,只属于类。同时,C++ 的静态成员函数只能访问静态成员。