C++static成员

1.静态成员变量的定义

用static修饰的成员变量称之为静态成员变量,静态成员变量一定要在类外进行初始化

fc1b30363a6542529adb2bb54d92976e.png

390eb55dd69644eb98bd04ddfea20b56.png 

 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;
}

323eded9f0134afe8e2b43f586f43006.png 

由上图运行结果可以看出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;
}

 698de7eabf074f798b51225dafcc1263.png

由上图可以看出对象D1的大小只包含int month,不包括,static int year,所以静态成员变量不存在对象中。

3.静态成员函数的定义 

static修饰的成员函数称之为静态成员函数,静态成员函数虽然是成员函数,但是没有this指针

 c937d255fca94014bebb6b20ac2a7d71.png

4.静态访问和非静态访问

静态成员函数只能访问静态成员,不能访问非静态成员

 非静态成员函数能访问静态成员,也能访问非静态成员

 8b02c97a7313409e98f664ae9dbfd622.png

number1和number2是非静态成员变量,静态成员函数print不能访问 因为没有this指针

1e794b91e51b488a95046e744fab7f8e.png 

 number1和number2是静态成员变量,非静态成员函数print可以访问

 5.访问静态成员

通过类域访问,类名   ::   成员函数或成员变量

f70e603f775f499d9162e9459868be32.png 

通过对象访问,对象    .   成员函数或成员变量 

dce18c7547034bbcaf74f8dab83013f2.png 

6.public,private,protect

静态成员也是类的成员,也受public,private,protect的限制

 a82e8ec3325e48bdb1e53111316dcc8d.png

7.静态成员变量不能在声明处给缺省值

因为缺省值是个构造函数初始化列表的,但静态成员变量不属于某个对象,不走初始化列表。 

9f3cfbdd09ca4352a6118e1bdb02e15f.png 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值