函数模板与类模板的详解

1.函数模板的性质
1) 函数模板并不是真正的函数,它只是C++编译生成具体函数的一个模子。
2) 函数模板本身并不生成函数,实际生成的函数是替换函数模板的那个函数,比如上例中的add(sum1,sum2),
    这种替换是编译期就绑定的。
3) 函数模板不是只编译一份满足多重需要,而是为每一种替换它的函数编译一份。
4) 函数模板不可以设置默认模板实参。比如template <typename T=0>不可以。

5) 函数模板不允许自动类型转换。

(6)模板的类型不固定,想是什么类型就可以是什么类型,具体是什么类型,执行的时候才知道。

(7)还要看执行的时候逻辑是否会出错,比如模板的功能是比大小,但传进去的参数确是类,所以就不可以。

C++模版函数的语法
template  <typename 模版参数列表…>

函数返回类型 函数名(形参列表…)

template <calss T1>    //T1为   所创建模板的类型

T1 m(T1 X,T1 y)

{

      return (x<y)?x:y;      //只要能调用<运算的都可以用这个模板,具体到的数据类型在执行的时候才生效!

}

//在这里调用对象做参数就是错的,因为对象不可以进行<运算。

calss Stu{.........}

Stu stu1,   Stu stu2

Stu stu=m(stu1,stu2);

//下面的就是对的!

int main()

{

     int n1=2;

     int n2=10;

     int i=m(n1,n2);   //在用模板的时候,n1和n2类型要相同,返回的类型也要相同,是int全都是int,是float全都是float

     cout<<"i"<<i<<endl;

     return 0;

}

类模板:在类中使用了模板类型

             构造函数用模板的时候要这样写  MyClass<T1,T2>::MyClass(T1 a,T2 b)

具体例子如下:

#ifndef LEIBOBAN_H
#define LEIBOBAN_H
#include<iostream>
using namespace std;
 
template <typename T1,typename T2>  //模板类的定义在声明文件中,其他文件重复引用该头文件时不会出错
class leiboban
{
public:
    T1 I;
    T2 J;
    leiboban(T1 a,T2 b)
    {
        void show();
        /*
        void show2()
        {
            cout<<"I="<<this->I<<",j="<<this->J<<end;
 
        }
        */
 
    }
};
//构造函数
template<typename T1,typename T2>   //每写一个用该模板类的函数时都要加上声明
MyClass<T1,T2>::MyClass(T1 a,T2 b){            //模板函数是这样定义的
    this->I=a;
    this->J=b;
}
//void show();
template<typename T1,typename T2>
void leiboban<T1,T2>::show()
{
    cout<<"I="<<this->I<<",J="<<this->J<<endl;
}
#endif // LEIBOBAN_H
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值