c++-类的static成员

有时我们需要一种所有的类对象所共享的成员,例如可以统计类对象的个数,那我们就要用到static关键字

我们可以是用全局变量来实现这个操作,但是全局变量在任何时候都可以修改,一不注意就会改变了它的值,这样破坏了类的封装性。

类的static成员不属于任何一个类对象,它是直接与类关联的

语法:

static在类中定义是引用型声明,不能在类中初始化。必须还要在类外进行定义性说明与初始化,如果不初始化默认为0。

特殊的整型static const 成员:(这里注意是整型)

在类中定义并初始化,可以不再类外定义(按照一般的static定义也是对的)。

static成员的优点

(1)static成员的名字是在类作用域中,可以避免与全局变量和其他类成员的命名冲突

(2)实现了封装

(3)可以看出成员是与哪个类相关联

看一个例子:

#include <iostream>

using namespace std;

class A
{
public:
	static int a;     //引用性声明,不能在这初始化,必须在类体外进行定义性说明
	//static int a=0;       //error 不能再类中直接初始化
	const static int b = 200;
	static const int c = 300;      //只能是静态常量整型才能在类中初始化,不需要在类体外进行定义性说明
	//static const double d = 400;    //error
};
int A::a=100;   //定义性说明,必不可少的,不要再带static了,可以在这里初始化
//A::a = 0;    //error
int main()
{
	cout<<A::a<<endl;
	cout<<A::b<<endl;
	cout<<A::c<<endl;
	return 0;
}
static成员函数

static成员函数没有this指针
static成员函数不能访问非static成员变量,不能调用非static成员函数

非static成员函数可以访问static成员变量,也可以调用static成员函数

#include <iostream>

using namespace std;

class A
{
private:
	static int a;
	int b;
public:
	void display()
	{
		cout<<a<<endl;
		cout<<b<<endl;
		getA();
	}

	static void getA()
	{
		cout<<a<<endl;
		//cout<<b<<endl;    //error因为没有this指针,所以static成员函数不能访问对象的成员
		//display();       //error , 同上
	}
};
int A::a;
int main()
{
	A a;
	a.display();
	A::getA();
	a.getA();     //不建议这样使用
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值