C++_静态数据成员和静态成员函数

1.如何实现属于某个类的所有对象共享某个数据?
解决的办法:
将所要共享的数据说明为全局变量,但这将破坏数据的封装性;

较好的解决办法是将所要共享的数据说明为类的静态成员。 

2.静态数据成员是类中所有对象共享的成员,而不是某个对象的成员,所以必须对它初始化,且对它的初始化不能在构造函数中进行;静态数据成员不属于任何对象, 它不因对象的建立而产生,也不因对象的析构而删除,它是类定义的一部分,所以使用静态数据成员不会破坏类的隐蔽性。

3.定义

静态数据成员:用关键字static声明,该类的所有对象维护该成员的同一个拷贝,必须在类外定义和初始化,用::来指明所属的类;

静态成员函数:类外代码可以使用类名和作用域操作符来调用静态成员函数;静态成员函数只能引用属于该类的静态数据成员和静态成员函数。

例1:

//具有静态数据成员和静态成员函数的point类
#include <iostream>
using namespace std;
class point
{
private:
	int x;
	int y;
	static int count;//静态成员声明
public:
	point(int vx = 0, int vy = 0) :x(vx), y(vy) { count++; }//带参数的构造函数
	point(point &p);//拷贝构造函数
	static void showCount();//静态函数成员
	void print();
	~point() { count--; }//析构函数
};
int point::count = 0;//在类外定义和初始化静态成员
point::point(point & p)
{
	x = p.x + 2;
	y = p.y + 3;
	count++;
}
void point::showCount()
{
	cout << "count:" << count << endl;
}
void point::print()
{
	cout << "x = " << x << ",y = " << y << endl;
}
int main()
{
	point p1(1, 2);//创建对象
	p1.print();
	p1.showCount();
	point p2(p1);//调用拷贝构造函数
	p2.print();
	p1.showCount();
	getchar();
}
/*
运行结果:
x = 1, y = 2
count = 1
x = 3, y = 5
count = 2
*/

例2:

#include <iostream>
using namespace std;
enum access_value{shared,in_use,locked,unlocked};//定义枚举类型,表示资源的状态

class access 
{
private:
	static access_value acs;//定义静态数据成员,只能取上述枚举类型中的值
public:
	static void set_access(access_value a);//设定资源的状态
	static access_value get_access();//获取资源的状态
};


void access::set_access(access_value a)//设定资源的状态
{
	acs = a;
}

access_value access::get_access()//获取资源的状态
{
	return acs;
}

access_value access::acs = shared;//初始化静态数据成员
char* value(int x)//根据数字返回枚举类型
{
	static char a[4][10] = { "shared","in_use","locked","unlocked"};
	switch (x)
	{
	case 0:return a[0]; break;
	case 1:return a[1]; break;
	case 2:return a[2]; break;
	case 3:return a[3]; break;
	default:
		break;
	}
}

int main()
{
	access obj1;//定义对象
	cout << "obj1 access:" << value(obj1.get_access()) << endl;
	obj1.set_access(unlocked);
	cout << "obj1 access:" << value(obj1.get_access()) << endl;
	getchar();
}
/*
运行结果:
obj1 access:shared
obj1 access:unlocked
*/





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大师兄电子工作室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值