c++模板学习

本文探讨了C++模板的核心概念,旨在实现算法与数据类型的解耦。介绍了函数模板和类模板的使用,展示了如何声明和调用模板函数及类模板,并通过代码示例解释了如何设置多个模板参数。最后,提到了模板定义的规范性问题。
摘要由CSDN通过智能技术生成

c++模板本质上是为了将算法与数据类型脱离。换句话说,就是为了使一个算法对任何的数据类型都可用。
模板有两种,一种是函数模板,另一种是类模板。
先说函数模板

#include<iostream>
using namespace std;
template<class T> void GetMax(T a, T b) {
    if (a > b)
        cout << a << endl;
    else
        cout << b << endl;
}
int main() {
    GetMax(19, 20);

}

在函数名前加上template,表示这个是模板函数;所有需要作为模板的变量,均可以用T来进行声明。在调用时,可以按照普通函数调用方式来进行调用。

再说类模板。类模板是为了使得类的功能实现不受数据类型困扰,所以类中的成员变量均可以替换为模板类型。
代码如下:

#include <iostream>
using namespace std;

template <class T> class compair {
    T v1, v2;

    char* a= "compair is running!";
public:
    static T s;
    compair(T f, T s) {
        v1 = f;
        v2 = s;
        cout << a << endl;
    }
    T getmax();
};
template <class T>
T compair<T>::s = 0;
template <class T>
T compair<T>::getmax() {
    if (v1 > v2)
    {
        s = v1;
        return v1;
    }
    else
    {
        s = v2;
        return v2;
    }
}

int main() {
    compair<char*> c("ab","cd");
    cout << c.getmax()<<endl;
    cout << c.s << endl;
    return 0;

}

在上述代码中,模板类中有静态模板成员变量,普通模板成员变量和普通成员变量。要注意,在类模板调用时,要声明模板中的数据类型。那么现在思考的问题是,可否在模板中设置多个模板参数?答案是可以的。
示例代码如下:

#include <iostream>
using namespace std;

template <class T,class U> class compair {
    T v1, v2;
    U u1;
    char* a= "compair is running!";
public:
    static T s;
    compair(T f, T s) {
        v1 = f;
        v2 = s;
        cout << a << endl;
    }
    T getmax();
};
template <class T,class U>
T compair<T,U>::s = 0;
template <class T,class U>
T compair<T,U>::getmax() {
    if (v1 > v2)
    {
        s = v1;

        u1 = v2;
        cout << u1 << endl;
        return v1;
    }
    else
    {
        s = v2;
        u1 = v1;
        cout << u1 << endl;
        return v2;

    }

}

int main() {
    compair<char*,char*> c("ab","gd");
    cout << c.getmax()<<endl;
    cout << c.s << endl;
    return 0;

}

上述代码中,模板里面引用了两个模板变量。查询资料可知,模板创建可以有以下几种形式。

template <class T> // 最常用的:一个class 参数。
template <class T, class U> // 两个class 参数。
template <class T, int N> // 一个class 和一个整数。
template <class T = char> // 有一个默认值。
template <int Tfunc (int)> // 参数为一个函数。

从第三条可知,我们的代码不是十分规范,最规范的应该在模板参数列表里面写入所设置的普通变量类型。

参考文献

http://blog.csdn.net/zqixiao_09/article/details/51474589

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值