C++ 函数模版运用

 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 可以通过空模板实参列表的语法限定编译器只通过模板匹配

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

时间: 2024-10-25 01:15:16

C++ 函数模版运用的相关文章

浅显易懂的单模版类——————(与函数模版的区别)

模版类是抽象的,必须进行具体类型,而函数模版则不一定 #include<iostream> #include<string> using namespace std; template < typename T>//定义模版不能加分号 class A { public: A(T a) { this->a = a; } T &get() { return a; } private: T a; }; int main() { A<int> a1(1

函数 的 重载 和 函数 模版

1 //函数的重载对一个函数名 赋予它 多重意义 就成为函数的重载 2 //在函数重载的基础上 我们仍然对那种 实现功能相似 3 // 但是 函数类型和形参不确定的 情况下 产生了 函数 模版 4 #include<iostream> 5 using namespace std; 6 template<class T> //模版声明 其中 T 为类型参数 7 T max(T a,T b,T c) //定义一个 通用模版 8 { 9 if(b>a) 10 a=b; 11 if(

JDBC中DAO事务函数模版

DAO事物函数模版 public void OrderFinsByPage(){ Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = DBUtils.getConnection(); //事务开始 conn.setAutoCommit(false); //业务逻辑 conn.commit(); } catch (Exception e) { try { conn.rol

为什么会有函数模版

demo 1 // 函数的业务逻辑 一样 // 函数的参数类型 不一样 void myswap01(int &a, int &b) { int c = 0; c = a; a = b; b = c; } void myswap02(char &a, char &b) { char c = 0; c = a; a = b; b = c; } void main() { { int x = 10; int y = 20; myswap01(x, y); printf("

初探C++函数模版学习笔记

泛型程序设计 特点:算法实现时不指定具体要操作的数据的类型.算法实现一遍但可适用于多种数据结构. 优势:减少重复代码的编写. 实现:大量编写模板, 使用模板的程序设计. 函数模版 为了交换两个int变量的值, 需要编写如下Swap函数: void Swap(int & x, int & y) { int tmp = x; x = y; y = tmp; } 为了交换两个double型变量的值, 还需要编写如下Swap函数: void Swap(double & x, double

C++编译器函数模版机制剖析 - 函数模版的本质

思考:为什么函数模板可以和函数重载放在一块.C++编译器是如何提供函数模板机制的? demo 1 #include <cstdio> #include <iostream> using namespace std; // 1.cpp // g++ -S 1.cpp -o 1.s template <typename T> void myswap(T &a, T &b) { T c = 0; c = a; a = b; b = c; cout <&l

当函数模版遇上函数重载

demo 1 #include <iostream> using namespace std; //让 类型参数化 ===, 方便程序员进行编码 // 泛型编程 //template 告诉C++编译器 我要开始泛型编程了 .看到T, 不要随便报错 template <typename T> void myswap(T &a, T &b) { T c = 0; c = a; a = b; b = c; cout << "hello ....我是模

字符串作为函数模版实参的意外情况

有时,当把c风格的不同字符串去实例化函数模版的同一个模版参数时,在实参演绎的过程中经常会发生 意想不到的事情,那就是编译失败,并报错类型不匹配. 正如下面的例子一样: #include<iostream> using namespace std; /* *匹配测试 */ template<typename T> int ref_fun(T & t1,T & t2) { return strlen(t1) - strlen(t2); } template<typ

为什么不要特化函数模版?

/* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm;

c++ 类模版、成员函数模版、函数模版 用法

C++函数模版与类模版. template <class T> void SwapFunction(T &first, T &second){ }//函数模版 template <class T>//类模版 class CTemplate{ public: void SWap(T &first, T &second){ } }; #include <iostream> class Single{ public: static Single