类模板详解\n类模板的定义及实例化\ntemplate\u003Cclass 模板参数>\nclass 类名 {\n    // 类定义\n};\n\ntemplate\u003Ctypename 模板参数>\nclass 类名 {\n    // 类定义\n};\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n其中: template是声明类模板的关键字,表示声明一个模板,模板参数可以是argv)\n{\n    Graphics\u003Cchar>* sc;  // 声明一个类模板指针,不需要实例化\n\n    func(*sc);  // 需要实例化,传递给函数func的是一个Graphics\u003Cchar>对象\n\n    auto iobj = sizeof(Graphics\u003Cstd::string>);  // 需要实例化,因为sizeof会计算Graphics\u003Cstring>对象的大小,\n                                                // 为了计算大小,编译器必须根据类模板定义产生该类型。\n    return 0;\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n类模板的成员函数\n类模板的成员函数可以在类模板的定义中定义(inline函数),也可以在类模板定义之外定义(此时成员函数定义前面必须加上template及模板参数)\n类模板成员函数本身也是一个模板,类模板被实例化时它并不自动被实例化,只有当它被调用或取地址,才被实例化\n类中的虚函数不能用类型参数模板\ntemplate \u003Ctypename T>\nclass Graphics {\npublic:\n    Graphics() {}\n    // 成员函数定义在类模板的定义中\n    void print() {}\n\n    // 类中的虚函数不能用类型参数模板\n    // template \u003Ctypename U>\n    // virtual void func(U value) {\n    // \n    // }\nprivate:\n    T m_value;\n};\n\n// 成员函数定义在类模板定义之外\ntemplate \u003Ctypename T>\nvoid Graphics\u003CT>::print()\n{\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n普通类的成员函数模板\n#include \u003Ciostream>\n// 普通类\nclass MyTest {\npublic:\n    // 成员函数模板\n    template \u003Ctypename U>\n    void func(U val)\n    {\n        std::cout \u003C\u003C \"type=\" \u003C\u003C typeid(val).name() \u003C\u003C \" value:\" \u003C\u003C val \u003C\u003C std::endl;\n    }\n};\n\nint main()\n{\n    MyTest test;\n    test.func(100); // 普通类的成员函数模板:自动类型推导为int\n    test.func(10.0);// 普通类的成员函数模板:自动类型推导为double\n    return 0;\n}\n// 输出\n// type=i value:100\n// type=d value:10\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n类模板的成员函数模板\n#include \u003Ciostream>\n\n// 类模板\ntemplate \u003Ctypename T>\nclass MyTest {\npublic:\n    MyTest(T val) : m_val(val) {}\n    // 普通成员函数\n    void print()\n    {\n        std::cout \u003C\u003C \"print() type=\" \u003C\u003C typeid(m_val).name() \u003C\u003C \" m_val:\" \u003C\u003C m_val \u003C\u003C std::endl;\n    }\n    // 成员函数模板\n    template \u003Ctypename U>\n    void func(U val)\n    {\n        std::cout \u003C\u003C \"template type=\" \u003C\u003C typeid(val).name() \u003C\u003C \" value:\" \u003C\u003C val \u003C\u003C std::endl;\n    }\n\nprivate:\n    T m_val;\n};\n\nint main()\n{\n    MyTest\u003Cint> test(100);  // 类模板实例化,显示指定类型T-> int\n    test.print();\n    test.func(10.0);  // 类模板的成员函数模板,自动推导出U-> double\n\n    MyTest\u003Cdouble> test1(100.0);  // 类模板实例化,显示指定类型T-> double\n    test1.print();\n    test1.func(10);  // 类模板的成员函数模板,自动推导出U-> int\n\n    return 0;\n}\n// 输出\n// print() type=i m_val:100\n// template type=d value:10\n// print() type=d m_val:100\n// template type=i value:10\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n拷贝构造函数模板与拷贝赋值运算符模板\ntemplate \u003Ctypename T>\nclass MyTest {\n  public:\n    // 构造函数模板\n    template \u003Ctypename U>\n    MyTest(U value)\n    {\n        std::cout \u003C\u003C \"类模板泛化\" \u003C\u003C std::endl;\n    }\n    // 拷贝构造函数模板\n    template \u003Ctypename T1>\n    MyTest(const MyTest\u003CT1>& other)\n    {\n        std::cout \u003C\u003C \"拷贝构造函数模板\" \u003C\u003C std::endl;\n    }\n    // 拷贝赋值运算符模板\n    template \u003Ctypename T2>\n    MyTest\u003CT> & operator=(const MyTest\u003CT2>& other)\n    {\n        std::cout \u003C\u003C \"拷贝赋值运算符模板\" \u003C\u003C std::endl;\n    }\n    // 成员函数模板\n    template \u003Ctypename V>\n    void func(V param)\n    {\n        std::cout \u003C\u003C \"func param\" \u003C\u003C param \u003C\u003C std::endl;\n    }\n\n    T          m_value1;\n    static int m_static_value;  // 静态成员变量\n};\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n类模板特例化\n类模板的特化分为全特化与偏特化两种方式\n全特化:对于全特化,类的所有参数都与模板类的所有参数一一对应\n\n普通成员函数全特化\n静态成员变量全特化\ntemplate \u003Ctypename T, typename U>\nstruct MyTest\n{\n    MyTest()\n    {\n        std::cout \u003C\u003C \"类模板泛化\" \u003C\u003C std::endl;\n    }\n\n    void func()\n    {\n        std::cout \u003C\u003C \"func函数泛化\" \u003C\u003C std::endl;\n    }\n    static  int  m_value;// 静态成员变量\n};\n\n// 普通成员函数全特化\ntemplate \u003C>\nvoid MyTest\u003Cint, double>::func()\n{\n    std::cout \u003C\u003C \"func全特化\" \u003C\u003C std::endl;\n}\n\ntemplate\u003Ctypename T, typename U>\nint MyTest\u003CT, U>::m_value = 10;\n\n// 静态成员函数全特化\ntemplate\u003Ctypename T, typena

【无标题】类模板定义实例化相关推荐

  1. 【C++基础学习】引起类模板被实例化情形总结

    在我们使用类模板时,只有当代码中使用了类模板的一个实例的名字,而且上下文环境要求必须存在类的定义时,这个类模板才被实例化.并不是每次使用一个类都要求知道该类的定义. (1)声明一个类模板的指针和引用, ...

  2. 函数模板与类模板定义和使用

    模板是将具有相似性的类和函数归纳起来构成一个类族或函数族,它可是程序具有通用性.模板分为类模板和函数模板. 目录 (一)函数模板 一般定义形式 模板函数重载 函数模板参数 带有多类型参数的函数模板 ( ...

  3. 类模板定义中智能引用

    * 模板定义中智能引用名字\"Tp\",不能引用\"T\"和\"U\"\n};\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10 ...

  4. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板定义

    1. 定义 类似函数模板,类模板以关键字template开始,后跟模板参数列表.在类模板(及其成员)的定义中,我们将模板参数当作替身,代替使用模板时用户需要提供的类型或值: template < ...

  5. VS 2013 C++ 类模板定义与实现 进行分离

    最近在看C++类模板的定义与实现,在按照正常的类的流程进行分离时发现"LNK2019: 无法解析的外部符号"这个错误. 解决方案: 1. 如果坚持使用分离的方法解决,可以在main ...

  6. 【无标题】类模板详解\n类模板的定义及实例化\ntemplate\u003Cclass 模板参数>\nclass 类名 {\n // 类定义\n};\n\ntemplate\u003Ctypen

    类模板详解\n类模板的定义及实例化\ntemplate\u003Cclass 模板参数>\nclass 类名 {\n    // 类定义\n};\n\ntemplate\u003Ctypenam ...

  7. 类模板详解\n类模板的定义及实例化 模板参数

    类模板详解\n类模板的定义及实例化\ntemplate\u003Cclass 模板参数>\nclass 类名 {\n    // 类定义\n};\n\ntemplate\u003Ctypenam ...

  8. C++类模板实例化条件

    (我不想了解这个,可是考试要考.... 并不是每次使用模板类都会实例化一个类 声明一个类模板的指针和引用不会引起类模板的实例化 如果检查这个指针或引用的成员时时,类模板会实例化 定义一个对象的时候需要 ...

  9. C++ 泛型编程(一):模板基础:函数模板、类模板、模板推演成函数的机制、模板实例化、模板匹配规则

    文章目录 泛型编程 函数模板 函数模板实例化 隐式实例化 显式实例化 函数模板的匹配规则 类模板 类模板的实例化 泛型编程 泛型编程旨在削减重复工作,如: 将一个函数多次重载不如将他写成泛型. voi ...

最新文章

  1. 新能源汽车:大变革催生十万亿市场空间
  2. 1、时间、FHS 学习笔记
  3. Spring整合Struts的几种最常见方式
  4. quality center 支持的平台
  5. android apk反编译工具下载,Android apk反编译工具下载与使用
  6. Spark之GraphX
  7. html5验证码制作,Html5生成验证码的示例代码
  8. win10便签常驻桌面_Win10用户的印象笔记便签深度体验 | 大使专栏
  9. eclipse安装与概述
  10. python 仿真 电力系统自动化_电力系统自动化仿真系统
  11. 动态生成表格--JS案例
  12. python源码中明明没有逻辑代码 为什么还能执行呢
  13. Proteus软件初学笔记
  14. excel导入,用反射匹配字段名
  15. SAP入行须知 | SAP项目管理(PS模块)概述 |大连易拓SAP
  16. 2020年IT技术的发展趋势!
  17. 关于英语猜词义的方法
  18. CentOS 7账号密码忘了怎么办?
  19. 创业板、融资融券被寄予厚望
  20. 视频监控系统由哪几部分组成?(视频监控入门基础-附思维导图)

热门文章

  1. delphi2009的安装办法
  2. sqlplus 便利设置
  3. 全网最详细SoilGrid数据的下载与提取(含四种方法)
  4. parameter_server架构
  5. OpenEDX MOOC平台搭建笔记
  6. java中的super()是什么?
  7. C++多态的实现机制
  8. 查看四边形四个点的顺序是否正确
  9. yolov5格式转换为labelme标注格式
  10. DSP程序 调试总结