类的静态成员

       类的静态成员是指声明为static的成员(包括成员函数和成员数据)。静态成员和类的普通成员一样,也有public、protected、private3种访问级别,也可以具有返回值,const修饰符等参数;静态成员的声明即在普通成员的声明前加static,其必须在类外定义,在定义时不加static;当一个成员被声明为静态成员后这个成员就不属于某个具体的实例,而是为所有的类对象所共享;类的静态成员和其他成员函数一样存放在独立于对象之外的代码段,静态成员函数和普通成员函数的区别是静态成员函数没有this指针,而静态成员函数里面定义的局部变量则和正常的函数一样,只有声明为static时才存放在静态区;静态成员的访问可用类名::静态成员或者对象.静态成员来访问。

       静态成员数据的声明、定义及访问:

class A
{
public:
	A(int _a):a(_a)
	{
		;
	}
private:
	int a;
	static int b;
};
int A::b = 0;

上面代码中,静态数据成员b在类内声明为static,在类外定义,因为静态成员独立于类的对象,因此不能在构造函数中对其进行初始化,所以在类外定义是对其赋初值,这里b的访问权限是private的,因此只能在成员函数中访问,我们可以用如下方式进行访问:

class A
{
public:
	A(int _a):a(_a)
	{
		;
	}
	void B(int tmp)
	{
		A::b += 1;
	}
private:
	int a;
	static int b;
};
int A::b = 0;

我们调用两次函数B,看看是否访问成功:

int main()
{
	A a1(1);
	a1.B(1);
	a1.B(1);

	return 0;
}

对齐进行调试,观察结果:

显然,调用成功。除此之外,还可以用对象::静态成员的方式访问,因为静态成员不属于任何对象,因此同一个类的任何对象都可以进行访问,在此不多做累述。

        下面我们来看看静态成员函数和普通成员函数是否能够相互调用:

        我们首先来看一下静态成员函数是否可以访问普通成员函数,我们写下如下代码:

class A
{
public:
	void B(int tmp);
	static void C(int);
private:
	int a;
};
void A::C(int)
{
	B(1);
}

我们看能不能通过编译:

显然不行,我们再来看普通成员函数是否可以调用静态成员函数:

class A
{
public:
	void B(int tmp)
	{
		C(1);
	}
	static void C(int);
private:
	int a;
};
void A::C(int)
{
	;
}

我们来看看能否调用成功:

可以看出能成功调用,显然,静态成员函数可以调用普通成员函数。

       通过上面的探讨,我们可以知道静态成员函数不能调用普通成员函数,而普通成员函数是可以调用静态成员函数的。关于类的静态成员的知识还有很多,希望我们可以在今后的学习中学到更多的知识。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值