🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”
概念
声明为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个字节,这个说明了什么呢?
说明静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区。