c++静态成员与函数
注意事项
1、静态成员属性需要在类内声明,在类外初始化,否则会报错
2、静态成员函数只能访问静态成员变量,而非静态成员函数不能访问静态成员属性
3、静态成员函数和成员属性是分配在全局区,而非静态成员属性和变量在栈区
所有对象共享一份静态成员属性,以及共享同一个静态成员函数
4、由于静态成员函数和属性不属于类,所以有两种访问方式
(1)通过对象来访问
(2)通过类名访问
5、同样静态成员属性和成员函数若为私有或保护权限,则也无法在类外进行访问
代码部分
静态成员属性
#include<iostream>
#include<string>
#include"pauser.h"
using namespace std;
//静态成员变量
//所有对象共享一份数据
//在编译阶段分配内存
//类内声明,类外初始化
class person
{
public:
static int m_A;//类内声明
//静态成员变量也有访问权限
//类外不能访问私有或保护权限下的静态成员
};
int person::m_A = 100;//类外初始化
void test01()
{
person p;
cout << p.m_A << endl;
person p1;
p1.m_A = 200;
cout << p.m_A << endl;
}
void test02()
{
//静态成员变量,不属于某一个对象,所有对象共享同一份数据
//因此静态成员变量有两种访问方式
//1、通过对象进行访问
person p;
cout << p.m_A << endl;
//2、通过类名进行访问
cout << person::m_A << endl;
}
int main()
{
//test01();
test02();
pauser();
}
静态成员函数
#include<iostream>
#include<string>
#include"pauser.h"
using namespace std;
//静态成员函数
//所有成员共享同一个函数
//静态成员函数只能访问静态成员变量
class person
{
public:
static void func()
{
m_A = 100;
//m_B = 200;//静态成员函数不能访问非静态成员变量,因为无法识别
cout << "静态成员函数调用" << endl;
cout << person::m_A << endl;
}
static int m_A;
int m_B;
private:
static void func2()
{
cout << "私有权限下静态成员函数调用" << endl;
}
};
int person::m_A = 0;
void test01()
{
//可以通过对象调用
person p;
p.func();
//通过类名调用
person::func();
}
int main()
{
test01();
pauser();
}