【C++】基础语法5--静态成员

静态成员变量

意义:所有对象共享一份数据

特性:编译阶段分配内存

用法:类内声明,类外初始化

注意:

  • static成员变量的内存既不是在声明类时分配,也不在分配对象时分配,而是在类外初始化时分配。反过来说,没有在类外初始化的static成员变量不能使用,静态成员变量不占对象的内存。
  • static成员变量的空间分配与释放(生命周期)和类的声明、对象的定义都没有关系,但逻辑上是属于类的。
class number
{
public:
    int num1;
    static int num2;
};
int number::num2=1;
int main()
{
    number n1;
    n1.num2=19;//对象访问
    number::num2=89;//类名访问
}

静态成员函数

  1. 所有的对象共享一份代码
  2. 静态成员函数只能访问静态成员变量,否则编译阶段会出错。因为静态成员函数为类本身所有,编译阶段加载。在编译的时候类的静态成员在类加载的时候就已经分配内存,而此时的非静态成员尚未分配内存,访问内存中不存在的东西自然会出错。
  • 访问方式
  1. 像普通成员函数一样用对象来访问
  2. 可以直接使用类名来访问,必须加作用域访问符::

对象模型

  • 一个对象是将普通成员属性与行为分开存放的,每个方法只有一份实例代码
  • 在实例化一个对象后,只有普通成员属性才会占对象实际空间,静态成员不占空间
  • 原因:每个对象调用方法的时候,代码执行过程都是一样的,所以没必要给每一个对象实例化一份函数。所以函数不占对象的实际空间

讨论:既然每个方法只有一份实例,那方法是如何区分操作对象的?--根据this指针来区分

this指针

  • 结论
  1. 每个普通成员被调用时,都会自动传入一个this指针,该指针指向当前调用该方法的对象
  2. this指针本质是一个指针常量,所以只想不能改变
person p1;
p1.personinfo();//给personinfo传入this指针,指针指向p1
  •  作用
  1. 解决函数参数与属性重名的问题
  2. 当方法想要返回对象本身时 
  • 注意:静态成员方法没有this指针,因为静态成员方法不需要区分对象,所有对象共享一份代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lindsey小姐月光加冕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值