07模板学习之模板类的static数据成员的归属问题

07模板学习之模板类的static数据成员的归属问题

1 模板类的static数据成员的归属问题分析
在这里插入图片描述
从上面的图分析,先看类模板中的static int a,若类模板中声明了static数据,那么该a是属于类模板还是属于具体类呢?假设属于类模板,那么通过继承后,所有的具体类将继承类模板的a,也就是说,该类模板的a在所有继承的具体类对象中共享,这样肯定是不合理的。所以我们猜测类模板的static数据属于具体类下面代码例子将演示这一点。

对比普通类的static数据,该数据也是属于具体类的,即该类的所有对象共享该数据成员,其它类不可能访问得到它。

2 例子解析

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

template<class T>
class Person{
public:
	static int a;
};

//类外初始化
template<class T> int Person<T>::a = 0;

int main(void){

	Person<int> p1, p2, p3;
	Person<char> pp1, pp2, pp3;

	p1.a = 10;
	pp1.a = 100;

	cout << p1.a << " " << p2.a << " " << p3.a << endl;
	cout << pp1.a << " " << pp2.a << " " << pp3.a << endl;

	return 0;
}

先假设上面的代码结果:
1)若static数据成员归模板所有,那么两个具体类int,char会共享同一个static数据,结果应该是最后一次static的改动,也就是都为100。
2)若static数据成员归具体类所有,那么int具体的所有对象都共享a,char具体类也如此,即输出应该为10 10 10, 100 100 100。

结果如下:
在这里插入图片描述
即模板的static数据成员属于具体类。

3 总结

- 模板类中的static数据成员属于具体的类,不属于模板类自己。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值