【C++基础】C++函数模板(二)

来源:互联网 发布:高博软件地址 编辑:程序博客网 时间:2024/06/06 07:40

  我是小毛驴,转载请注明出处:http://blog.csdn.net/liulongling/article/details/50624029

 一、函数模版

   1.1什么是函数模板?

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

  • c++提供两种模板机制:函数模板和类模板
  • 类属 - 类型参数化,又称参数模板 使得程序(算法)可以从逻辑上抽象,把被处理的对象(数据)类型作为参数传递。

   1.2为什么用函数模板?

   1.3代码示例

//////  Created by 刘龙玲//  Copyright © 2016年 liulongling. All rights reserved.//#define using _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;void test02(int a,int b){    int temp = a;    a = b;    b = temp;    cout<<"a="<<a<<"b="<<b<<endl;}template<class T>void test01(T& a,T& b){    T temp = a;    a = b;    b = temp;        cout<<"a="<<a<<"b="<<b<<endl;}int main(){    int a = 10;    int b = 20;        test01(a, b);        float c = 1.6;    float d = 2.90;        test01(c, d);        //函数模板不允许自动类型转化    //test01(a,c);    //普通函数能够自动进行类型转化    test02(a,c);    return 1;}

   1.4 函数模板和普通函数的区别?

  • 函数模板不允许自动类型转化 
  • 普通函数能够自动进行类型转化

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

  • 函数模板可以像普通函数那样可以被重载
  • c++编译器优先考虑普通函数
  • 如果函数模板可以产生一个更好的匹配,那么选择模板
  • 可以通过空模板实参列表的语法限定编译器只能通过模板匹配 

1.6 总结

  • 模板把函数或类要处理的数据类型参数化,表现为参数的多态性,成为类属。
  • 模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。
  • 用模板是为了实现泛型,可以减轻编程的工作量,增强函数的重用性。


0 0