文档章节

类模板和函数模板

首席吹牛官
 首席吹牛官
发布于 2015/05/22 12:57
字数 359
阅读 4
收藏 0

                  模板一般分为模板函数和类模板。

                  模板函数的一般形式为:

                  template<类型形参表> 返回值类型 函数名(参数列表){函数体}

                  类模板的一般形式为:

                  template<类型形参表> class 类名 {类声明体}

                  类中成员函数的类外实现的形式

                  template<类型形参表> 返回值类型 类名<类型名表>::成员函数名(参数列表) {函数体}

                  下面以数组模板类为例

                  

#include <iostream>

using namespace std;


template <typename T>
class Array
{
public:
    Array(int size = 10);
    ~Array();
    T operator[](int index);
    T& get(int index) const;
    int length() const {
        return m_len;
    }
private:
    Array(const Array&);
    Array& operator ==(const Array&);
    T *p_array;
    int m_len;
};

template<typename T>
Array<T>::Array(int size):
    p_array(new T[size]),
    m_len(size)
{
}
template<typename T>
Array<T>::~Array()
{
    delete p_array;
}
template<typename T>
T Array<T>::operator[](int index)
{
    return p_array[index];
}
template<typename T>
T& Array<T>::get(int index) const
{
    if (index > m_len -1 ) {
        throw "ERROR:index is out!";
    } else {
        return p_array[index];
    }
}


int main()
{
    Array<int> intArr;
    cout << "length of int array is " << intArr.length() << '\n';
    try{
        intArr.get(11);
    }catch(const char *ex) {
        cout << ex << '\n';
    }
    intArr.get(0) = 2;
    cout << "elems of int array is  ";
    for (int i = 0; i < intArr.length();++i) {
        cout << intArr[i] << '\t';
    }
    
    cout << '\n';
    
    Array<char> charArr(5);
    cout << "length of cahr array is " << charArr.length() << '\n';
    try{
        charArr.get(11);
    }catch(const char *ex) {
        cout << ex << '\n';
    }
    charArr.get(4) = 'Z';
    cout << "elems of char array is  ";
    for (int i = 0; i < charArr.length();++i) {
        cout << charArr[i] << '\t';
    }
    
    return 0;
}

         结果:

       


       使用模板一般都是逻辑相同,类型不同。

      模板函数在实例化时以函数重载来体现都是在编译期完成。     

© 著作权归作者所有

首席吹牛官
粉丝 9
博文 368
码字总数 191938
作品 0
闵行
程序员
私信 提问
C++的模板机制

为什么需要模板编程 所谓函数模板,实际上是建立一个通用函数,其函数返回类型、形参类型或函数中使用的类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板 所谓类模板,和...

沙米笔记
2016/05/28
729
2
c++中的函数模版和类模版

因为使用模板可以使程序员建立具有通用类型的函数库和类库。模板也是C++语言支持参数化多态性的工具。 函数模板   函数模板能以同样的程序代码对不同类型的数据进行处理,其关键是将所处理...

Alien_Dog
2016/11/24
10
0
C++ primer第二次阅读学习笔记(第16章:模板与泛型编程) .

第十六章:模板与泛型编程 所谓泛型编程就是以独立于任何特定类型的方式编程。使用时,我们需要提供具体程序实例所操作的类型或值。标准库的容器、迭代器和算法都是泛型编程的例子。 模板是泛...

长平狐
2012/10/08
65
0
C++泛型编程学习(二)——类模板

目录 目录 前言 类模板 总结 前言 C++泛型编程学习(一)记录了函数模板。这部分记录下类模板相关的知识。 类模板 类模板与函数模板的定义和使用类似,如果有多个类的功能是相同的,但是数据类...

simonforfuture
2018/01/04
0
0
C++泛型编程学习(三)——类模板

目录 目录 前言 类模板实例 类模板小结 总结 前言 C++泛型编程学习(二)——类模板中已经介绍了如何在一个文件中,把类模板的方法和实现分开,这里主要记录下类模板的声明和定义分别写在头文件...

simonforfuture
2018/01/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 ——不知道假装开心,装的像么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :天黑了 你很忧愁, 你说世界上, 找不到四块五的妞, 行走在凌晨两点的马路上, 你疲倦地拿着半盒黄鹤楼。#今日歌曲推荐# 《四块...

小小编辑
今天
2.2K
18
64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
69
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
34
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
124
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部