c++ 模板(Templates)

模板是c++中一个非常重要的额概念,学会使用模板可以是我们程序的效率大大提高。

模板分为两类,包括函数模板与类模板,而在类模板中又可以用到函数模板。

一、函数模板:

模板可以生成通用的函数,这些函数可以接受不同类型的参数,和返回不同类型的参数。

定义模板函数的时候可以使用以下两种形式:

template <class identifier> function_declaration;

template <typename identifier> function_declaration;

无论使用class关键字或者typename关键字都是可以的。


在定义函数的时候把 定义的模板看成一种普通的类型使用就可以了,可以用来声明变量,可以作为放回值使用。

例如交换两个变量的值就可以这么写

<pre name="code" class="cpp">#include<iostream>
using namespace std;
template <class T> 
<pre name="code" class="html">void swap_demo (T &a, T &b) {
        T temp;
        temp = a;
        a=b;
        b=temp;
}
int main(){ int a = 1, b = 2; cout << "a: " << a << ", b:" << b << endl; cout << "------------------"<< endl; swap_demo(a, b);swap_demo <int> (a,b); cout << "a: " << a << ", b: "<< b << endl; return 0;}

 


 在这个例子中通用类型T 被用作函数swap_demo的参数,所以不需要说明<int>编译器也可以自动检测传入的数据类型,但是我认为加一个<int>可以让我们形成一个良好的习惯。 


二、类模板

我们可以定义类模板,让一个类可以有基于通用类型的成员,而不需要在类生成的时候定义具体的数据类型。

例如:

template <class T>
class Demo {
    T a=0,b=0;
public:<pre name="code" class="cpp">
Demo (T a, T b){
    this.a = a;
    this.b = b;
}

 
    void swap_demo (T &a, T &b) {
        T temp;
        temp = a;
        a=b;
        b=temp;
    }
    T getmax();
}<pre name="code" class="cpp">template <class T>
T Demo::getmax() {
    T retval;
    retval = a > b ? a:b;
    return a;
}

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值