C++基础(二)C/C++中的静态、非静态成员函数、变量

C++中每个对象都有自己独立的空间,但是C++的类成员函数只有一份,为全部类对象使用,每个成员函数(非静态)的都有个隐含参数,即this指针,用了接收对象的地址,看起来是对象调用成员函数,事实是成员函数以this为参数,进行数据操作;

这里涉及的成员函数分为静态成员函数,静态成员变量,以及非静态成员函数;

先说C中静态变量以及静态函数:

在C语言中,一个标识符具有三种属性:存储属性,链接属性,作用域

存储属性:静态,寄存器,堆栈

链接属性:内部,外部

作用域:可见范围

C中函数体外的变量即为全局变量,默认具有外部(external)链接属性,若加上static限制则说明此变量的链接属性改为内部,只能在本源文件中使用,外部不可见;

而函数体内的变量,若无明确static限制则为局部变量,存在堆栈区,作用域仅仅限制在块中;若加上static限制则变量存在全局区,全局区的变量在编译时便已指定内存,运行时分配;

C中的函数,加上static则是改变函数的链接属性,说明这个函数只能在本源文件内使用;


在C++中关于static主要涉及到类,对象:

静态成员变量:

1)类的static成员变量,属于整个类,为所有对象所共有;

2)初始化方式不同,静态成员存储在全局数据区,从程序开始运行便要分配内存,与类对象是否产生无关,所以它的初始化方式不能放在构造函数中,根本原因是:类的静态成员变量的初始化在对象初始化之前;

3)sizeof(对象)不包括该类的静态成员变量大小,两者存储区域都不同;对象处在堆栈上,静态成员变量处在全局区,在代码区旁边;

类的静态成员变量相当于本类的“全局变量”,但是这个“全局变量”是限定了范围,甚至可以设定访问属性(private,public等);

静态成员函数:

1)普通成员函数隐含this指针,但是静态成员函数没有,没有this指针,他就没法传递这个this指针给其他普通的成员函数,当然对象也不能传递自己的地址给他,即:静态成员函数不仅不能操作非静态的成员变量,也不能调用非静态的成员该函数!

2)他能做的就是 调用其他静态成员函数,或者操作其他静态成员变量;

3)反过来,类的非静态成员函数是可以任意的操作类的静态成员变量以及静态成员函数。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值