🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”
概念
声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量,用static修饰的成员函数,称之为静态成员函数,静态成员变量一定要在类外进行初始化。
我们来看下面的这一段代码,思考一下,程序中创建出了多少个类对象。
#include<iostream>
using namespace std;
class A
{
public:A(){++_scount;}A(const A& t){++_scount;}static int GetAcount(){//this->return _scount;}
private:
// int _a1 = 1;
// int _a2 = 2;
//public:static int _scount;
};
int A::_scount = 0;
void TestA()
{cout << A::GetAcount() <<endl;A a1, a2;A a3(a1);cout << A::GetAcount() << endl;
}
int main()
{TestA();return 0;
}
在上面的这段代码当中,我们可以获取到下面的几个知识点
- 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
- 类静态成员即可用类名::静态成员或者对象.静态成员来访问。
- 静态成员函数没有隐藏的this指针, 不能访问任何非静态成员
- 静态成员也是类的成员,受到public,protected,private等访问限定符的约束。
我们再来看下面的这段代码:
#include<iostream>
using namespace std;
class A
{
public:A(){++_scount;}A(const A& t){++_scount;}static int GetAcount(){//this->return _scount;}
private:int _a1 = 1;int _a2 = 2;
//public:static int _scount;
};
int A::_scount = 0;
void TestA()
{cout << A::GetAcount() <<endl;A a1, a2;A a3(a1);cout << A::GetAcount() << endl;
}
int main()
{A aa1;cout << sizeof(aa1) << endl;return 0;
}
我们可以看到,类的大小是4个字节,这个说明了什么呢?
说明静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区。