您的位置:首页 > 编程语言 > C语言/C++

C++函数模板类模板

2016-02-02 15:18 309 查看
转载请注明出处:/article/7555556.html

什么是函数模板?为什么用函数模板?

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

c++提供两种模板机制:函数模板和类模板

类属 - 类型参数化,又称参数模板 使得程序(算法)可以从逻辑上抽象,把被处理的对象(数据)类型作为参数传递。

<p class="p1"></p><pre name="code" class="cpp">//
//
//  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;
}



函数模板和普通函数的区别? 如上面代码

//函数模板不允许自动类型转化
//test01(a,c);
//普通函数能够自动进行类型转化
test02(a,c);


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

2. 普通函数能够自动进行类型转化

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

 函数模板可以像普通函数那样可以被重载

 c++编译器优先考虑普通函数

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

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

总结:

 模板把函数或类要处理的数据类型参数化,表现为参数的多态性,成为类属。

 模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。

 用模板是为了实现泛型,可以减轻编程的工作量,增强函数的重用性。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: