02-8-2 静态成员函数
静态成员函数的特点:
- 所有对象共享同一个函数
- 静态成员函数只能访问静态成员变量。
同静态成员变量一样,静态成员函数也有两种访问方式
-
通过对象访问:
#include
using namespace std; class test { public: static void func() { cout << "静态成员函数的调用" << endl; } }; int main() { class test t1; t1.func(); return 0; } -
通过类名访问
#include
using namespace std; class test { public: static void func() { cout << "静态成员函数的调用" << endl; } }; int main() { test::func(); return 0; }
我们现在来讲一下静态成员函数的特点:
-
所有对象共享同一个函数
#include
using namespace std; class test { public: static void func() { cout << "静态成员函数的调用" << endl; } }; int main() { class test t1; class test t2; t1.func(); t2.func(); return 0; } 运行结果:
静态成员函数的调用 静态成员函数的调用
可以看到。我们在这里创建了两个对象,为
p1
和p2
。无论是使用p1
还是p2
调用静态成员函数func()
都可以成功调用。 -
静态成员函数只能访问静态成员变量。
#include
using namespace std; class test { private: static int m_A; int m_B; public: static void func() { m_A = 200; //m_B = 200; } }; int test::m_A = 100; int main() { return 0; } 静态成员函数不可以访问非静态成员变量。如果我们上面注释掉的那一行,如果去掉注释,那么就会报错:
非静态成员引用必须与特定对象相对
因为非静态成员变量的访问一定要有一个对象,比如
t1.m_B
。但是静态成员函数的调用可以不通过对象,比如:test::func();
。而静态成员变量是这个类下的所有对象都共享的,所以使用静态成员函数可以访问静态成员变量。
静态成员函数也是有访问权限的。比如说:
#include <iostream>
using namespace std;
class test
{
public:
static void func1()
{
cout << "这是公共的静态成员函数的调用" << endl;
}
private:
static void func2()
{
cout << "这是私有的静态成员函数的调用" << endl;
}
};
int main()
{
test::func1();
//test::func2();
return 0;
}
我们将test::func2();
注释掉了,这是因为如果去掉注释,则会报错:
函数 "test::func2" (已声明 所在行数:xx) 不可访问
总结:
- 静态成员函数的特点
- 所有对象共享同一个函数
- 静态成员函数只能访问静态成员变量。
- 静态成员函数的访问方式
- 通过对象进行访问
- 通过类名进行访问
- 静态成员函数也遵守相应的权限管理。
:-)