转载:http://blog.csdn.net/ljq32/article/details/7911390

1. 与普通类的static成员一样,类内部声明一次,类外部定义一次,定义时可以设置也可以不设置初始值;

2. 类模板内部声明与普通类的static成员一致:

[html] view plaincopy print?
  1. //16.4.7.h
  2. template <class T>
  3. class Foo
  4. {
  5. public:
  6. static int count() { return cnt; }
  7. private:
  8. static int cnt; //类模板内部声明静态变量cnt
  9. //也必须在类模板外部定义一次cnt,否则编译错误:"undefined reference to `Foo<int>::cnt'";
  10. };

3. 类模板外部定义一次,通常在类模板定义文件中,定义时不带关键字static,必须以模板形参表与模板名字进行限定,以指出它是类模板的成员;

[html] view plaincopy print?
  1. //16.4.7.cpp
  2. #include <iostream>
  3. #include "16.4.7.h"
  4. using namespace std;
  5. //类模板定义文件定义cnt并给定初始值,当未明确指定初始值时,默认值为相应数据类型的默认值,int类型为0;
  6. template <class T> int Foo<T>::cnt = -1;
  7. int main()
  8. {
  9. //static成员cnt的不同使用方式
  10. Foo<int> f;
  11. Foo<int> *pf = &f;
  12. Foo<int> &rf = f;
  13. cout << "f.count():" << f.count() << endl;
  14. cout << "rf.count():" << rf.count() << endl;
  15. cout << "pf->count():" << pf->count() << endl;
  16. cout << "Foo<int>::count():" << Foo<int>::count() << endl;
  17. return 0;
  18. }
  19. 运行结果:
  20. f.count():-1
  21. rf.count():-1
  22. pf->count():-1
  23. Foo<int>::count():-1

类模板static成员的使用相关推荐

  1. 如何初始化类的static成员变量?

    如何初始化类的static成员变量? 类的static成员变量不被某一个对象所独有,而是被所有同类型的对象所共有. 只能在头文件中声明类的static成员变量,不可在头文件中初始化,否则会造成重定义. ...

  2. C++ Primer 5th笔记(chap 16 模板和泛型编程) 类模板的成员函数

    1. 分类 1.1 定义在类模板内的成员函数 被隐式声明为内联函数. 1.2. 类模板外部的成员函数, 类模板的成员函数本身是一个普通函数.但是,类模板的每个实例都有其自己版本的成员函数.因此,类模板 ...

  3. C++ 类的知识 | 构造函数再探、匿名对象、友元函数、内部类、类的const成员、类的static成员

    文章目录 构造函数再探 以下代码共调用多少次拷贝构造函数 委托构造函数 概念 形式 匿名对象 友元 友元的声明 友元类 令成员函数作为友元 函数重载和友元 注意 内部类 特性 类的const成员 可变 ...

  4. C++提高部分_C++类模板中成员函数的创建时机---C++语言工作笔记089

    然后我们再来看类模板中成员函数的创建时机是什么时候 可以看到,普通类中的成员函数一开始就可以创建了, 类模板中的成员函数在调用时才创建. 我们写个例子看看,可以看到我们写了一个Person1类,然后 ...

  5. C++知识点58——类模板(3、类模板的成员模板)

    接上一篇文章https://blog.csdn.net/Master_Cui/article/details/111824108 六.类模板中的成员模板 类的成员函数也可以被写成模板,因为模板的实例化 ...

  6. c++ 类内static成员初始化

    类内部的static成员,除了为const static 且为整数类型(int char bool)可在类内部初始化. 其他的都建议在对应的cpp文件中进行初始化. test.h #ifndef TE ...

  7. 类的static成员并用其实现一个单例模式

    对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量.比如说统计某种类型对象已创建的数量.如果我们用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量,这时我们可以用类的静态成员来 ...

  8. C++ 函数模板作为类模板的成员函数

    /****************类模板***/#include <iostream>using namespace std;template <class T1,class T2& ...

  9. C++知识点61——typename与class、模板编程与继承、模板类和友元、类模板与static成员

    一.typename与class的异同 1.啥时候既可以使用typename,又可以使用class? 当表示模板参数的时候,二者没有区别 2.啥时候只能使用typename,不能使用class? 当模 ...

最新文章

  1. python 搭建登陆系统_Django 搭建CMDB系统完整[1](用户登录)
  2. Windows 7 上怎样打开SQL Server 配置管理器
  3. Microsoft Exchange 2010 安装配置
  4. P5748 集合划分计数(贝尔数/多项式)
  5. 周六——中国电影博物馆
  6. 容器编排技术  - Kubernetes kubectl convert 命令详解
  7. linux mysql导出导入表_linux mysql 数据库操作导入导出 数据表导出导入
  8. 凡人和神学习和使用软件的七个层次
  9. python 面向对象_Python 和 Java 基础对比 08 —— 面向对象
  10. Kicad如何导入封装库、符号库(元件库)以及3D模型文件?
  11. arcgis java api,Java中调用ArcGIS Server REST API
  12. 取值方法_函数的定义域和参数的取值范围详解
  13. 第二章.JSP/Servlet及相关技术详解
  14. ong拼音汉字_拼音ong的正确发音
  15. 美信科技冲刺A股上市:拟募资4亿元,公司及董事长张定珍曾遭处罚
  16. 计算机是1946年由科学家发明,1946年第一台计算机叫什么
  17. 阿西莫夫机器人三定律
  18. 关于手机系统。。。。
  19. 滴滴云「于某声」在「服务器采购过程中」受贿累计超过 1000 万元:已移交公安机关
  20. 如何清理占用计算机内存,告诉你如何深度清理电脑内存

热门文章

  1. 揭开Python科学计算的面纱
  2. 设计模式学习笔记-基础知识篇
  3. DDD:DomainEvent、ApplicationEvent、Command
  4. 项目总结:华南师范大学校园开发教育android客户端总结
  5. java的ZipOutputStream压缩文件的两个问题(乱码和每次zip后文件md5变化)
  6. java比较时间sql_如何正确比较日期 java.sql.Date
  7. html vbs 输入框,HTML_vbs实现的下拉框对应键入值,vbs实现的下拉框对应键入值 - phpStudy...
  8. linux脚本编写规则,shell脚本编写守则
  9. pcb成型板aoi检测_基于AOI技术的PCB常见质量缺陷检测
  10. Java代码格式化算法_一个时间格式化的工具类:TimeUtil