1.静态成员变量的定义
用static修饰的成员变量称之为静态成员变量,静态成员变量一定要在类外进行初始化
2.静态成员变量作用范围
静态成员变量为所有对象共同使用,不被某个对象独占。
#include<iostream>
using namespace std;
class Date
{
public:
Date():month(10)
{
}
void print()
{
cout << year << "年" << month << "月" << endl;
}
void reduce()
{
year--;
}
int getyear()
{
return year;
}
private:
static int year;
int month;
};
int Date::year = 2024;
int main()
{
Date D2;
D2.reduce();
Date D1;
D1.reduce();
cout << D1.getyear() << endl;
}
由上图运行结果可以看出D2和D1都调用了reduce()对year进行减1,但year减了两次,说明静态成员变量为所有对象公用
2.静态成员变量不存在对象中,存在静态内存区中。
#include<iostream>
using namespace std;
class Date
{
public:
Date():month(10)
{
}
void print()
{
cout << year << "年" << month << "月" << endl;
}
private:
static int year;
int month;
};
int Date::year = 2024;
int main()
{
Date D1;
cout << sizeof(D1) << endl;
}
由上图可以看出对象D1的大小只包含int month,不包括,static int year,所以静态成员变量不存在对象中。
3.静态成员函数的定义
static修饰的成员函数称之为静态成员函数,静态成员函数虽然是成员函数,但是没有this指针
4.静态访问和非静态访问
静态成员函数只能访问静态成员,不能访问非静态成员
非静态成员函数能访问静态成员,也能访问非静态成员
number1和number2是非静态成员变量,静态成员函数print不能访问 因为没有this指针
number1和number2是静态成员变量,非静态成员函数print可以访问
5.访问静态成员
通过类域访问,类名 :: 成员函数或成员变量
通过对象访问,对象 . 成员函数或成员变量
6.public,private,protect
静态成员也是类的成员,也受public,private,protect的限制
7.静态成员变量不能在声明处给缺省值
因为缺省值是个构造函数初始化列表的,但静态成员变量不属于某个对象,不走初始化列表。