C++基础之——静态成员变量&&静态成员函数

 静态成员变量

        在定义类中的成员变量时,如果我们想保持这个成员的独立性,我们可以用static关键字将其定义为静态的,这就意味着不论创建多少个成员变量,该静态成员只有一个。

与静态变量相似,静态成员变量只能初始化一次,都在内存分区中的全局数据区分配内存,到程序结束时才释放。这就意味着,static成员变量不随对象的创建而分配内存,也不随对象的销毁而释放内存。而普通成员变量在对象创建时分配内存,在对象销毁时释放内存。

静态变量初始化时可以赋初值,也可以不赋值。如果不赋值,那么会被默认初始化为0,。全局数据区的变量都有默认的初始值0,而堆区、栈区变量的默认值是不确定的,系统会给这个变量自动赋一个随机的值。

  • 静态成员变量属于整个类所有,所有对象共享类的静态成员变量
  • 静态成员变量需要在类外初始化(必须初始化,可以不赋值例如 int A::a = 1)
  • 可以通过类名直接访问共有静态成员变量
  • 可以通过对象名访问共有静态成员变量
  • 静态成员变量在程序内部位于全局数据区(静态区)
  • 静态成员变量的生命期不依赖于任何对象,与程序的生命周期一致
  • 静态成员变量不会被继承,父类和子类共享静态成员变量
  • 静态成员不会影响类的大小
#include<iostream>
using namespace std;
class A {/*类在刚创建的时候系统会提供一个字节大小的占位符 即sizeof(一个空的类) = 1*/
public:
	static int a;
};
int A::a = 1;
int main() {
	A a, b, c;
	a.a++;
	b.a++;
	c.a++;
	A::a++;
	cout << a.a << endl;/*  5 */
	return 0;
}

静态成员函数

  • 定义静态成员函数,直接使用static关键字修饰即可,静态成员函数属于整个类所有,没有this指针
  • 静态成员函数智能直接访问静态成员变量和静态成员函数(没有this指针,访问普通的成员变量和成员函数中都会自动把this指针隐藏)和类外部的其他元素。
  • 可以通过类名直接访问静态成员函数
  • 可以通过对象名访问类的共有静态成员函数
#include<iostream>
using namespace std;
class A {
	int a;

public:
	void work() {//this会当做隐藏参数传进
		a = 1;//省略了this this->a = 1
	}
	static int b;
	static void fun() {
		//静态函数没有this指针 属于整个类 不属于某个对象
		//静态成员函数可调用静态成员函数
		//静态成员函数可以调用静态成员变量
		//可以通过类名+作用域直接访问类的共有静态函数
		//可以通过对象直接访问共有静态函数
		//a=3 错误 因为非静态成员变量需要创建成员对象的时候才分配空间 而静态成员变量在创建成员对象之前就已经存在了 有冲突
		b++;
	}
};
int A::b = 1;//静态成员变量在类外初始化
int main() {
	A a, b, c;
	a.fun();
	b.fun();
	c.fun();
	A::fun();
	cout << a.b << endl;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coke_3.2.2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值