C++ 静态成员与非静态成员

前言

  • 静态数据成员:是类的一部分,为类的所有实例共享(静态区)
  • 非静态数据成员:类的每个实例都有一份拷贝(动态区)

1. 非静态成员函数

非静态成员函数通过对象(或对象指针)来访问,有this指针。
非静态函数成员属于类的实例所有,所以只有在创建类的实例的时候才会分配内存,访问类的非静态函数要通过对象来实现。

2. 静态成员变量

静态成员变量是被说明为 static 的成员变量,其具有以下特征:

  • 被该类所有对象共享,不属于任何一个具体的对象
  • 只有一个静态数据存储空间
  • 存储空间不由构造函数分配 ,必须在类外进行初始化
  • 可通过类名访问,也可通过对象访问

示例:

class B
{ 
public:
	static int si;
	int i;
	//B() :si(0){} //错误
	//B() { si = 0; } //如果没有下面的“int B::si = 0;”,则出错
};
int B::si = 0; 
int main()
{ 
	B bb1;
	cout << B::si << " " << bb1.si << endl;
	// cout	<< bb1.i << endl;	//错误:使用了未初始化的局部变量bb1
}
  • 静态数据成员的访问
    • 在类只能访问公有的静态数据成员,通过类名或者对象(对象指针)访问
    • 类内的非静态成员函数可直接访问static静态数据成员,但要使用非内联函数定义,该函数定义应与静态成员初始化在同一个源程序文件

3. 静态成员函数

  • 定义:被说明为static的成员函数,由一个类的所有对象共享
  • 引入静态成员函数的目的:访问同一类中的静态数据成员,维护对象之间共享的数据
  • 被调用方式
    • 在类外调用
    类名::静态公有成员函数名(实参表)
    对象名.静态公有成员函数名(实参表)
    
    • 在类内调用:直接调用静态成员函数
  • 静态成员函数访问本类成员的权限
    • 可以直接访问该类的静态数据和函数成员
    • 访问非静态数据成员,必须通过参数传递方式得到对象名,再通过对象名来访问
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值