当我们需要为一个类定义一个在全局范围内使用的函数时,我们可以使用类的静态成员函数。静态成员函数只能访问静态成员变量,它们没有this指针,所以无法访问非静态成员变量、函数和成员变量的this指针。在C++中,静态成员函数前面加上static关键字即可将其设置为静态成员函数。
如何声明定义静态成员函数
我们可以将静态成员函数声明为public、protected、或private。声明一个静态成员函数的主要方法是在函数头中使用static关键字。在类定义外部定义静态成员函数时,我们需要使用类名和范围解析运算符::,也就是类名和函数名之间要加上两个冒号。
示例:
class MyClass {
public:
static void staticFunc() {
// 实现静态成员函数的代码
}
};
如何使用静态成员函数
使用静态成员函数,需要按照类名和范围解析运算符::的形式来调用它。如果在类实例内部调用静态成员函数,需要用到实例对象中的函数调用运算符(即点符号)。
示例1:
#include <iostream>
using namespace std;
class MyClass{
static int count;
public:
MyClass(){
count++;
}
static int getCount(){
return count;
}
};
// 静态成员变量需要在外部初始化
int MyClass::count = 0;
int main(){
MyClass obj1, obj2, obj3;
cout << MyClass::getCount() << endl; // 输出 3,使用范围解析运算符调用静态成员函数
return 0;
}
在上面的示例中,我们声明了一个MyClass类,其中有一个静态成员变量count,每当我们创建一个MyClass对象时,它的构造函数都会将count加1。在MyClass中实现了一个静态成员函数getCount,它返回当前MyClass实例的数量,我们可以使用MyClass::getCount()来调用它,得到当前实例数的值。
示例2:
#include <iostream>
#include <string>
using namespace std;
class Person{
string name;
public:
static string sayHello(){
return "Hello";
}
};
int main(){
cout << Person::sayHello() << endl; // 输出 Hello
return 0;
}
上述示例定义了一个Person类,它有一个私有成员变量name,但由于我们使用静态成员函数的方式来实现该类中的函数,该函数中无法访问该类的非静态成员。在这个例子中,我们定义了一个名为sayHello的静态成员函数,它返回字符串“Hello”。在主函数中,我们使用Person::sayHello()来调用此函数并输出结果。
总的来说,在C++中,静态成员函数为我们在一个类中添加一个类范围内定义的全局函数的方式,具有更高的可见性和常规全局函数不具备的一些优点。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++分析讲解类的静态成员函数如何使用 - Python技术站