类模版的static成员

类模版中声明static成员

template <class T> class Foo
{
    public:
        static size_t count() { ++ctr; cout << ctr << endl; return ctr; }
    private:
        static size_t ctr;
};

类模版Foo中static的成员变量ctr和成员函数count()。

 

类模版static成员变量的初始化

template<class T> size_t Foo<T>::ctr = 0;    //类外

 

类模版Foo每次实例化表示不同的类型,相同类型的对象共享一个static成员。因此下面f1、f2、f3共享一个static成员,f4、f5共享一个static成员

Foo<int> f1, f2, f3;
Foo<string> f4, f5;

 

访问static成员

f4.count();            //通过对象访问
f5.count();
Foo<string>::count();  //通过类作用操作符直接访问

 

完整代码

#include <iostream>
using namespace std;
template <class T> class Foo
{
    public:
        static size_t count() { ++ctr; cout << ctr << endl; return ctr; }
    private:
        static size_t ctr;
};
template<class T> size_t Foo<T>::ctr = 0;

int main()
{
    Foo<int> f1, f2, f3;
    f1.count();
    f2.count();
    f3.count();
    Foo<string> f4, f5;
    f4.count();
    f5.count();
    Foo<string>::count();
}

运行结果

1
2
3
1
2
3

 

posted @ 2015-03-23 21:11  jihite  阅读(1426)  评论(0编辑  收藏  举报