zoukankan      html  css  js  c++  java
  • C++模板template

    模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。

    1、模板函数

     1 #include <iostream>
     2 using namespce std;
     3 
     4 //声明一个函数模版,用来比较输入的两个相同数据类型的参数的大小
     5 //class也可以被typename代替,T可以被任何字母或者数字代替。
     6 template <class T>
     7 T min(T x,T y)
     8 { 
     9     return(x<y)?x:y;
    10 }
    11 
    12 void main()
    13 {
    14      int n1=2,n2=10;
    15      double d1=1.5,d2=5.6;
    16      cout<< "较小整数:"<<min(n1,n2)<<endl;
    17      cout<< "较小实数:"<<min(d1,d2)<<endl;
    18      system("PAUSE");
    19 }

    2、模板类

     1 // ClassTemplate.h
     2 #ifndef ClassTemplate_HH
     3 #define ClassTemplate_HH
     4 
     5 template <typename T1,typename T2>
     6 class myClass
     7 {
     8 private:
     9      T1 I;
    10      T2 J;
    11 public:
    12      myClass(T1 a, T2 b);//Constructor
    13      void show();
    14 };
    15 
    16 //注意,函数定义也是在.h文件中。
    17 template <typename T1,typename T2>
    18 myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b)
    19 {
    20 }
    21 
    22 template <typename T1,typename T2>
    23 void myClass<T1,T2>::show()
    24 {
    25      cout<<"I="<<I<<", J="<<J<<endl;
    26 }
    27 
    28 #endif
    29 
    30 // main.cpp
    31 #include <iostream>
    32 #include "ClassTemplate.h"
    33 using namespace std;
    34 void main()
    35 {
    36      myClass<int,int> class1(3,5);
    37      class1.show();
    38      myClass<int,char> class2(3,'a');
    39      class2.show();
    40      system("PAUSE");
    41 }

    3、模板类型的参数
      1)一般来说,非类型模板参数可以是常整数(包括枚举)或者指向外部链接对象的指针。
      那么就是说,浮点数是不行的,指向内部链接对象的指针是不行的。

      2)模板类型是一个容器或类

     1 template <typename T>
     2 void print(T v)
     3 {
     4     T::iterator itor;
     5     for (itor = v.begin(); itor != v.end(); ++itor)
     6     {
     7         cout << *itor << " ";
     8     }
     9     cout << endl;
    10 }
    11 
    12 void main(int argc, char **argv)
    13 {
    14     list<int> l;
    15     l.push_back(1);
    16     l.push_front(2);
    17     if(!l.empty())
    18         print(l);
    19     vector<int> vec;
    20     vec.push_back(1);
    21     vec.push_back(6);
    22     if(!vec.empty())
    23         print(vec);
    24 }

    附:参考http://www.cnblogs.com/gaojun/archive/2010/09/10/1823354.html

  • 相关阅读:
    [转载]windows下mongodb安装与使用整理
    CentOS SVN 服务器搭建
    linux下expect使用教程
    PHP时间格式控制符对照表
    WebGoat学习——SQL注入(SQL Injection)
    跨站脚本攻击(Cross‐Site Scripting (XSS))实践
    WebGoat学习——跨站请求伪造(Cross Site Request Forgery (CSRF))
    WebGoat学习——跨站脚本攻击(Cross‐Site Scripting (XSS))
    编程方式取得Spring上下文的Properties
    网站页面打开浏览器table中显示图片
  • 原文地址:https://www.cnblogs.com/wangbin-heng/p/9545333.html
Copyright © 2011-2022 走看看