C++的类中静态成员变量和静态成员函数的理解和使用

c++中静态成员被当做是该类类型的全部变量,对于非静态成员,每个类都有自己的复制品,而静态成员对每个类都只有一个复制。所以静态成员只有一份,由该类类型的所有对象访问。

如下代码所示,其中sum成员变量使用了static,声明为静态成员变量。这样的话这个变量就是对象obj1和obj2所共享的。所以在定义两个对象的时候,两个对象的构造函数对sum变量的操作,都是操作的同一个变量,而num就是每个对象各自拥有的。因此当输出sum的时候,都是输出的最后一次构造函数调用所赋值给sum的值,而输出的num是各自对象构造函数赋值的值。

#include <iostream>

using namespace std;

class obj{
public:
	obj(int a, int b, int c);
	void get_number();
	void get_sum();


private:
	int x;
	int y;
	int z;
	int num;
	static int sum;
};

int obj::sum = 0;

obj::obj(int a, int b, int c)
{
	x = a;
	y = b;
	z = c;
	num = x + y + z;
	sum = x + y + z;
}

void obj::get_number()
{
	cout << "num = " << num << endl;
}

void obj::get_sum()
{
	cout << "sum = " << sum << endl;
}

int main(int argc, char *argv[])
{
	obj obj1(1, 2, 3), obj2(4, 5, 6);

	obj1.get_number();
	obj2.get_number();

	obj1.get_sum();
	obj2.get_sum();

	while (1);
	return 0;
}

结果如下:


与全局的对象相比,静态数据成员的优势:

1.静态数据成员没有进入全局名字空间,不存在程序中其他的全局名字冲突的可能性。

 2.使用静态成员可以隐藏信息。因为静态成员可以是private,而全局对象就不能。

 

需要注意:

1.静态成员变量不能再类中被初始化。

2.静态成员函数不能调用类的非静态成员。就像静态成员变量一样,不属于类的对象,所以就没有this指针。

3.静态数据成员不能受private控制符的作用。

4.静态数据成员可以直接被类名调用。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值