模版

简介:
  • 非类型模版
  • 类型模版
    1. 类模版
    2. 函数模版

 

一。非类型模版 

复制代码
#include <iostream>
using namespace std;

template<int Size>
class Index
{
    public:
        int operator[](char vchar) 
        { return vchar % Size; }
};

int main()
{
    Index<26> index;
    cout << index['a'] << endl;
}
复制代码

 

二。类模版

模版——模版形参为基本类型

复制代码
#include <iostream>
using namespace std;

template<class Type>
class trie
{
    public:
        trie(Type val_1, Type val_2) : num_1(val_1), num_2(val_2) {}
        void print_sum() { cout << num_1 + num_2 << endl; }
    private:
        Type num_1, num_2;
};

int main()
{
    trie<int> tt(2, 5);
    tt.print_sum();
}
复制代码

模版——模版形参为自定义非模版类

复制代码
#include <iostream>
using namespace std;

template<class Type>
class trie
{
    public:
        Type num;
};
class Index
{
    public:
        int operator[](char vchar) 
        { return vchar % 26; }
};

int main()
{
    trie<Index> tt;
    cout << tt.num['a'] << endl;
    cout << tt.num['z'] << endl;
}
复制代码

模版——模版形参为自定义模版类

复制代码
#include <iostream>
using namespace std;

template<class Type, int Size>
class trie
{
    public:
        Type num;
};

template<int Size>
class Index
{
    public:
        int operator[](char vchar) 
        { return vchar % Size; }
};

int main()
{
    trie<Index<26>, 26> t;
}
复制代码

类模版成员函数定义

成员函数为非模版函数

复制代码
#include <iostream>
#include <cstring>
using namespace std;

template <class Type, int Size>
class test
{
    public:
        test(Type num) : val(num) {}
        void print_val();
    private:
        Type val;
};

template<class Type, int Size>
void test<Type, Size>::print_val()
{
    cout << val << " " << Size << endl;
}

int main()
{
    test<int, 10> a(4);
    a.print_val();
}
复制代码

成员函数为模版函数

复制代码
#include <iostream>
#include <cstring>
using namespace std;

template <class Type, int Size>
class test
{
    public:
        test(Type num) : val(num) {}
        template<class Type_fuc>
        void print_val(Type_fuc m);
    private:
        Type val;
};

template<class Type, int Size>
template<class Type_fuc>  //模版类的模版函数需要另起一行
void test<Type, Size>::print_val(Type_fuc m)
{
    cout << val << " " << Size << endl;
    cout << "m:" << m << endl;
}

int main()
{
    test<int, 10> a(4);
    a.print_val("hello");
}
复制代码

 

三。函数模版

复制代码
#include <iostream>
using namespace std;

template<class Type>
Type sum(Type num_1, Type num_2)
{
    return num_1 + num_2;
}
int main()
{
    cout << sum(2, 3) << endl;
    cout << sum(2.2, 3.0) << endl;
}
复制代码

结果

5

5.2

 




本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3601495.html,如需转载请自行联系原作者


相关文章
|
6月前
树链剖分模板
树链剖分模板
47 0
|
4月前
|
存储 编译器 C++
【C++】详解C++的模板
【C++】详解C++的模板
|
算法 编译器 C++
C++模版基础
C++模版基础
45 0
|
6月前
|
C++
c++模版
c++模版
|
6月前
|
算法 C++ 容器
|
编译器 C++
【C++】模版(一)
泛型编程、模版(一): 1.泛型编程:
35 0
模板拉杆
模板拉杆信息图
159 0
模板拉杆
|
前端开发 开发者
less-模版配置|学习笔记
快速学习 less- 模版配置
123 0
|
C++
C++模版从精通到精神分裂
这是一个教科书般经典的例子。介绍C++的继承和多态。 这里唯一需要重点强调的是:对函数LetAnimalTalk和vector va 来说,我们可以想象他们是客户。[face=黑体]通过继承把变化封装到基类的后面,这样使用基类接口的客户就不需要改动![/face]对客户来说,无论基类后面怎么变化,你都影响不到我。
6761 0