类模版中声明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 = ;    //类外

类模版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 = ; 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

类模版的static成员的更多相关文章

  1. 类模板的static成员

    下列代码可以通过编译吗?如何修改使其通过编译? template <class T> struct sum {   static void foo(T op1 , T op2){    c ...

  2. C++学习笔记(3)----类模板的static成员

    与任何其他类相同,类模板可以声明 static 成员: template <typename T> class Foo { public: static std::size_t count ...

  3. C++ 类中的static成员的初始化和特点

    C++ 类中的static成员的初始化和特点 #include <iostream> using namespace std; class Test { public: Test() : ...

  4. cc31a_demo--CppPrimer_静态成员与继承-在派生类中访问基类中的static成员的方法

    //*基类中的static成员,在整个继承层次中只有一个实例 //*在派生类中访问基类中的static成员的方法 //1.基类名::成员名 //2.子类名::成员名 //3.对象.成员名 //4.指针 ...

  5. c++:类中的static成员

    首先静态成员可以是public的,也可以是private的,只需在一般的变量.函数声明语句前加上static关键字即可声明一个static变量. 类中的静态成员存在与任何对象之外,所有该类对象的共享一 ...

  6. [转]C++ 类中的static成员的初始化和特点

    在C++的类中有些成员变量初始化和一般数据类型的成员变量有所不同.以下测试编译环境为: ➜ g++ -v Using built-in specs. COLLECT_GCC=g++ Target: x ...

  7. java类中的static成员变量和static方法简单介绍,持续补充

    一.静态成员变量 1.属于整个类而不是某个对象实例,所以可以直接通过类名和对象名去调用. 2.静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收 二.静态方 ...

  8. 类的静态(Static)成员——字段

    定义一个雇员类: namespace StaticFieldTest1 { class Employee { public int Id { get; set; } public string Fir ...

  9. C++类const和static成员初始化

    class A{ private: int a; //变量,属于对象任何地方初始化即可 ; //常量,属于对象,声明的时候初始化.在构造函数初始化列表初始化,最后取初始化列表的值 static int ...

随机推荐

  1. C#:最简洁强大的代码生成器

    这是我们项目中最常用,也是最强大的代码生成器,可以自动生成 存储过程,Model,DAL,BLL 多层的脚本. 第一步:配置config,设置连接的数据库 <?xml version=" ...

  2. 泛型List<T>转存为XML文档

    经常会有这情况,在程序处理结果为泛型List<T>,但为了能把这些集合输出XML文档.Insus.NET就因此问题,演示一个范例.在程序中,创建一个类: List<T>的集合手 ...

  3. c++位运算符 | & ^ ~ && ||,补码,反码

    一:简介 1 位逻辑运算符: & (位   “与”)  and       ^  (位   “异或”)       |   (位    “或”)   or       ~  (位   “取反” ...

  4. Mybatis+maven自动构建dao、mapper、model

    1.Pom.xml文件配置: 代码: <plugins> <!-- Mybatis generator代码生成插件 配置 --> <plugin> <grou ...

  5. Visual Studio 2015安装插件

    VS2015可以通过安装各种插件增强自己的功能! 插件安装方法: 下载插件后,打开VS2015,双击插件就会出现对应插件安装界面了,对应安装一下就可以了! 插件网址: https://marketpl ...

  6. vue添加新属性不更新原因

    一: 在我们使用vue进行开发的过程中,可能会遇到一种情况:当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新到视图上去: 当我们去看vue文档的时候,会发现有这么一句话:如果在实例创建之后 ...

  7. 注解和注释以及Spring和SpringMVC常用的注解

    1.两者区别 注解 :参与代码编译,以@开头的.它是给应用程序看的,单独使用注解毫无意义,一定要跟工具一起使用,这个所谓的工具实际就是能读懂注解的应用程序 注释 :对代码没有影响.对代码起到解释.说明 ...

  8. Exadata X7来了

    1.Exadata Brings In-Memory OLTP to Storage Exadata Storage Servers add a memory cache in front of Fl ...

  9. 21. sessionStorage和localStorage的使用

    sessionStorage和localStorage的使用   前言 这是学习笔记,把从别人博客里转载的https://www.cnblogs.com/wangyue99599/p/9088904. ...

  10. innodb的读写参数优化

    (1)    读取参数,global buffer pool以及 local buffer Innodb_buffer_pool_size,理论上越大越好,建议服务器50%~80%,实际为数据大小80 ...