静态成员函数
- 所有对象共享同一个函数
- 静态成员函数只能访问静态成员变量
- 所有对象共享同一个函数
class Person {
public:
static void func() {
cout << "static void func调用" << endl;
}
};
//有两种访问方式
void test01() {
//1、通过对象访问
Person p;
p.func();
//2、通过类名访问
Person::func();
}
运行结果
为什么有第二种访问方式?
因为所有对象共享同一个函数,所有可以通过类名对函数进行调用。
- 静态成员函数只能访问静态成员变量
我们添加两个变量,一个静态变量,一个非静态变量。并且在静态函数里进行赋值。
class Person {
public:
static void func() {
m_A = 100;//静态成员函数 可以访问 静态成员变量
m_B = 200;//静态成员函数 不可以访问 非静态成员变量,无法区分到底是哪个对象的m_B属性
cout << "static void func调用" << endl;
}
static int m_A;//静态成员变量
int m_B;//非静态成员变量
};
int Person::m_A = 0;
//有两种访问方式
void test01() {
//1、通过对象访问
Person p;
p.func();
//2、通过类名访问
Person::func();
}
此时编译器会报错。
意思为:非静态变量不可以在静态函数下进行赋值。
那么为什么会报错呢?
我们假设创建了两个对象p1和p2
那么如果修改m_B,是对p1的m_B进行修改还是对p2的m_B进行修改。编译器无法做出判断,而m_A属于静态变量,所有属性都共享。
所有非静态变量不可以在静态函数下进行赋值。
- 静态成员函数有访问权限的
class Person {
private:
static void func2() {
cout << "static void func2调用" << endl;
}
};
//有两种访问方式
void test01() {
Person::func2();
}
此时会报错
类外访问不到私有静态函数
总结:
#include<iostream>
using namespace std;
//静态成员函数
//所有对象共享同一个函数
//静态成员函数只能访问静态成员变量
class Person {
public:
static void func() {
m_A = 100;//静态成员函数 可以访问 静态成员变量
//m_B = 200;//静态成员函数 不可以访问 非静态成员变量,无法区分到底是哪个对象的m_B属性
cout << "static void func调用" << endl;
}
//静态成员函数也是有访问权限的
private:
static void func2() {
cout << "static void func2调用" << endl;
}
static int m_A;//静态成员变量
int m_B;//非静态成员变量
};
int Person::m_A = 0;
//有两种访问方式
void test01() {
//1、通过对象访问
Person p;
p.func();
//2、通过类名访问
Person::func();
//类外访问不到静态私有函数
//Person::func2();
}
int main() {
test01();
system("pause");
return 0;
}