博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++模版使用
阅读量:2436 次
发布时间:2019-05-10

本文共 1629 字,大约阅读时间需要 5 分钟。

一.基本

以下的模版类型关键字class在新C++标准中建议使用typename代替.
1.1通用函数
template <class Ttype> re-type func-name(parameter list)
{
       //body of funtion
}
例如:
template <class X> void swap(X &a,X &b)
{
       X temp;
       temp = a;
       a = b;
       b = temp;
}
#include <iostream>
using namespace std;
int main()
{
       int i=10, j=20;
       swap(i, j);
       cout<<"swapped i, j:"<<i<<j<<'/n';
}
1.2通用类
template <class Ttype> class class-name
{
       //body of class
}
例如:
#include <iostream>
using namespace std;
const int SIZE = 10;
template <class StackType> class stack
{
      StackType stack[SIZE];
      int tos;                                                            //栈顶索引
public:
      stack()  { tos = 0;}
      void push(StackType ob)
       {
              if(tos==SIZE)
              {
                      cout<<"stack is full./n";
                      return;
              }
              stack[tos]=ob;
              tos++;
       }
       StackType pop()
       {
              if(tos==0)
              {
                     cout<<"stack is empty./n");
                      return 0;
              }
              tos--;
              return stack[tos];
       }
}
int main()
{
        stack<char> s1;
        s1.push('a');
        s1.push('b');
        while(s1.tos)
        {
               cout<<"pop s1:"<<s1.pop()<<'/n';
        }
}
本质上,我认为模版实现了通用逻辑的定义,使算法独立于数据类型(由于实际程序一定要先给出数据类型,所以编译程序需要先解析模版,类似于宏命令).如上面的栈类,实际可能有整型栈或浮点型栈等.如果不使用模版,我们需要针对每个类型编一个栈类,其实操作又是完全一样.顺便说一下:STL就是一批高手精心设计的模版.

二.提高
2.1多类型模版
模版类型可以有多个,如:
template <typename OrgType, typename DesType> DesType covent(OrgType org)
{
       return (DesType)org;
}
2.2重载
同类等类似,模版也可以重载.如:定义同名的函数重载函数模版或定义另一个同名但类型定义数不同的模版.
template<> void swap<int>(int &a, int &b)
{
       int temp;
       temp = a;
       a =b ;
       b = temp;
}
2.3默认类型
template <class X=int>  class myclass
{
        //body of class
}
2.4使用无类型参数
template <class Stype, int size> class stack
{
      Stype stackBuffer[size];
      ... ...
}
调用时:
stack<int , 20>  intStack;
2.5typenaem和export关键字
typename 通知编译器模版声明中使用的名字是类型名,而不是对象名,前面的模版类型关键字class可以用它代替.
export用在template声明之前,使其它文件只通过指定模版声明而不是全部复制来使用其它文件中定义的模版.

转载地址:http://ehwqb.baihongyu.com/

你可能感兴趣的文章
移动通信概要(转)
查看>>
CMD命令全集(转)
查看>>
深度探索C++对象模型 ( 第四部分 )(转)
查看>>
MySQL中的SQL特征(转)
查看>>
使用JBuilder和WTK2.2搭建MIDP1.0和MIDP2.0开发环境(转)
查看>>
Symbian命名规则(翻译)(转)
查看>>
windows server 2003的设置使用(转)
查看>>
优化Win2000的NTFS系统(转)
查看>>
IE漏洞可使黑客轻易获取私人信息(转)
查看>>
脱机备份与恢复实战(转)
查看>>
WLINUX下的DNS服务器设置(转)
查看>>
游戏引擎剖析(二)(转)
查看>>
sms发mms C语言源码(转)
查看>>
窝CDMA网络中移动IP接入Internet(转)
查看>>
实现MMS增值业务的关键技术(转)
查看>>
Vista被破解 一个小程序可成功激活(转)
查看>>
SEO作弊常见方法和形式(转)
查看>>
蓝芽技术的原理和应用(2)(转)
查看>>
解决接通电源后自动开机问题(转)
查看>>
实例编程:用VC写个文件捆绑工具(转)
查看>>