码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 函数模版运用

时间:2020-02-12 11:14:59      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:好的   实参   microsoft   调用函数   重载   include   参数传递   类模板   不同   

 c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表。这个通用函数就成为函数模板。凡是函数体相同的函数都可以用这个模板代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同函

数的功能。

  1)c++提供两种模板机制:函数模板和类模板
  2)类属 - 类型参数化,又称参数模板
    使得程序(算法)可以从逻辑上抽象,把被处理的对象(数据)类型作为参数传递。
总结:
  1)模板把函数或类要处理的数据类型参数化,表现为参数的多态性,成为类属。
  2)模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。

 

#include <iostream>
using namespace std;
/*
void myswap(int &a, int &b)
{
    int t = a;
    a = b;
    b = t;
}
void myswap(char &a, char &b)
{
    char t = a;
    a = b;
    b = t;
}
*/
//template 关键字告诉C++编译器 我要开始泛型了.你不要随便报错 
//数据类型T 参数化数据类型
template <typename T>
void myswap(T &a, T &b)
{
    T t;
    t = a;
    a = b;
    b = t;
}
void main()
{
    //char a = ‘c‘;
   
    int  x = 1;
    int     y = 2;
    myswap(x, y); //自动数据类型 推导的方式

    float a = 2.0;
    float b = 3.0;

    myswap(a, b); //自动数据类型 推导的方式
    myswap<float>(a, b); //显示类型调用

    cout<<"hello..."<<endl;
    system("pause");
    return ;
}

 

函数模板遇上函数重载

函数模板和普通函数区别结论:

  (1)函数模板不允许自动类型转化

  (2)普通函数能够进行自动类型转换

函数模板和普通函数在一起,调用规则: 

  1 函数模板可以像普通函数一样被重载

  2 C++编译器优先考虑普通函数

  3 如果函数模板可以产生一个更好的匹配,那么选择模板

  4 可以通过空模板实参列表的语法限定编译器只通过模板匹配

C++ 函数模版运用

标签:好的   实参   microsoft   调用函数   重载   include   参数传递   类模板   不同   

原文地址:https://www.cnblogs.com/wuguoqiang/p/12297887.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!