C++函数模板

本文介绍了C++中的泛型编程,主要通过函数模板和类模板实现。函数模板允许创建通用函数,提高复用性,例如示例中的`add`函数。模板使用的关键字包括`template`和`typename`。自动类型推导在调用函数模板时要求传入参数类型一致,而指定类型可以进行隐式类型转换。文章还对比了函数模板与普通函数在类型转换和调用优先级上的区别。
摘要由CSDN通过智能技术生成

(声明:学习自用,如有错误欢迎指导改正)

C++另一种编程思想称为泛型编程,主要利用的技术就是模板

C++提供两种模板机制:函数模板、类模板

函数模板作用:

1.建立通用函数,其返回值和形参类型不具体给出,用一个虚拟的类型来代表

2.提高函数复用性,将类型参数化

模板函数语法:

template<typename T>

函数声明或定义

解释:

template     -----声明创建模板

typename   -----表明后面的符号是一种数据类型(可以用class替代)

T                ------通用的数据类型,可以替换

#include <iostream>

using namespace std;

template<typename T>  //声明一个函数模板,告诉编译器后面的T不要报错,T是一个通用数据类型
T add(T a,T b)
{
    return a+b;
}

int main()
{
    int x=2;
    int y=3;
    //使用函数模板——自动类型推导
    cout<<"result:"<<add(x,y)<<endl;
    //使用函数模板——指定类型
    cout<<"result"<<add<int>(x,y)<<endl;
    return 0;

}

注意事项:

1.采用自动类型推导方式调用函数模板的话,需要一致的数据类型,即在上面的代码中,传入的x和y类型要一致

2.模板必须确定出T的数据类型才可以使用

#include <iostream>

using namespace std;

template<typename T>
void fun()
{
    cout<<"调用fun"<<endl;
}

int main()
{
    fun<int>();
    return 0;
} 

普通函数和函数模板的区别:

1.普通函数调用时可以发生自动类型转换(隐式)

2.函数模板调用时,如果使用自动类型推导,不会发生隐式的自动类型转换

3.如果函数模板利用指定类型的方式,可以发生隐式的自动类型转换

4.函数模板的复用性更高

5.如果函数模板和普通函数都可以实现,优先调用普通函数

#include <iostream>

using namespace std;


template<typename T>
T add(T a,T b)
{
    return a+b;
}

int main()
{
    int a=2;
    int b=3;
    char c='c';
    cout<<"自动类型推导方式调用函数模板:"<<add(a,b)<<endl; //成功执行,输出结果为5
    cout<<"自动类型推导方式调用函数模板:"<<add(a,c)<<endl; //失败,类型不一致,无法发生隐式自动类型转换
    cout<<"指定类型方式调用函数模板:"<<add<int>(a,c)<<endl; //成功执行,输出结果为101
    cout<<"指定类型方式调用函数模板:"<<add<int>(a,b)<<endl; //成功执行,输出结果为5
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值