C++ 提供了多种代码重用机制,在前面介绍派生和继承时,派生类可以继承基类中的成员变量和成员函数。模板是另一种代码重用机制。

有时候在设计程序的时候会遇到这样一种情况:需要设计的几个类,其功能都是一样的,仅仅只是需要操作的数据类型不同。例如我们需要创建一个数组类,该数组可能是 int 整型数组,也可能是 double 类型数组、string 类型数组等。解决类似的问题,固然可以将所有的类都设计一遍,但是在 C++ 中,我们有更好的方法,就是设计一个模板类。

在本例中,我们定义了一个表示数组的模板类 array,借用该示例,我们来了解一下模板类的一些基本语法。定义模板类 array 时,前面加上了一句声明

template<class T>

该语句称为模板头,可以单独放在一行,也可以与后面的class array放在同一行,这都没有关系。模板头中的“T”称为类参数,类参数表示将会以确定的数据类型替代之,任何有效的 C++ 标识符均可以作为类参数,当然通常我们还是会用“T”来做类参数。
模板头中,template 关键字和“<”之间可以保留一个空格,但通常这两者之间不留空格。

对于模板类而言,在类外定义类中的成员函数的时候都需要加上模板头。同时由于 array 是个模板类,因此类名是 array,故而在类外定义带参构造函数的完整形式是:

template < class T >
T & array< T >::array( int n )
{num = new T[n];length = n;
}

而如果是在类内部定义该函数,则会相对简单一些:

array( int n )
{num = new T[n];length = n;
}

本例中用到了前面所介绍的很多知识点,例如将默认构造函数置为 private 属性,重载下标操作符,重载输出操作符等,这些知识点希望能够仔细领会。

模板类至少有一个类参数,但是可以有多个类参数,每一个类参数前都必须有关键字 class 或者类型名

template< class T, class S, class R>
class test
{public:S fun( R r);
private:T x;
};

本例就是一个具有多个类参数的模板类示例。

C++模板基本概念及语法相关推荐

  1. C++ 基础概念、语法和易错点整理

    目录 基础知识 构造函数与析构函数 虚函数 继承 单例模式 重载.隐藏和重写(覆盖) vector 扩容机制应注意的问题 STL 迭代器 前言 快秋招了,专门用一篇博客整理一下 C++ 的一些基础概念 ...

  2. C++函数模板的详细讲解【函数模板的概念、用法及其模板函数的概念知识】

    目录 前言 C++函数模板的使用 函数模板语法 1.模板说明 2.函数定义 3.函数模板调用 模板函数 函数模板和函数重载 嵌套使用函数模板 函数模板和普通函数在一起,调用规则 在Linux中反汇编查 ...

  3. 模板的概念以及函数模板

    1.模板的概念 模板就是建立通用的模具,其中函数模板可以传进不同类型的实参,大大提高函数的复用性 特点:模板不可以直接使用,要先进行声明,它只是一个通用框架 模板并不是万能的 2.函数模板 c++的一 ...

  4. C++模板的概念<>(泛型编程)

    在阅读RXW源码的时候,老是看到<>这种成对的括号,不懂何意,查了一下原来是C++的模板,, 但是看了我还是不明觉厉,,有时间一定要系统学习下C++视频课程 20220201 nnd,找了 ...

  5. JavaScript从入门到精通之入门篇(一)概念与语法

    入门篇大纲 第一部分 概念与语法 1.JavaScript的历史 2.基本概念 3.JavaScript的使用.调试和异常处理 4.基本词法和变量 5.数据类型和类型转换 6.运算符 算数运算符 赋值 ...

  6. Java中抽象类和接口在概念、语法和应用上的区别和关系

    2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...

  7. YAML第一章 基本概念及语法

    YAML第一章 基本概念及语法 简介 本文对YAML的基本概念及语法进行了详细的分析,尤其是对YAML的语法进行了详细的阐述,旨在希望通过本文能对YAML有一个基本的了解,能够书写YAML文档. 声明 ...

  8. 第八章第一节:Java继承之继承概念、语法、成员访问和super关键字

    文章目录 一:继承的概念及语法 (1)什么是继承 (2)Java继承语法 二:成员访问 (1)子类访问父类的成员变量 (2)子类访问父类的成员方法 三:super关键字 (1)super关键字 A:作 ...

  9. MDX基本概念和语法

    MDX基本概念和语法 1 MDX简介 1.1 MDX重要概念 1.2 维度(Dimensions).级别(Levels).成员(Members)和度量值(Measures) 1.3 轴维度和切片器维度 ...

最新文章

  1. html css百分比效果,css百分比不起作用是什么原因?
  2. 洛谷 P1149 火柴棒等式
  3. 内存泄露检测工具之DMalloc
  4. 分类与回归树(CART)相关知识
  5. java中Date与DateFormat的格式输出
  6. 使用.net Stopwatch class 来分析你的代码
  7. Vuejs:组件 slot 内容分发
  8. TensorFlow7-多元线性回归模型
  9. python爬取歌词_利用Python网络爬虫抓取网易云音乐歌词
  10. MFC 教程【14_SOCKET类的设计和实现】
  11. Android三种风格的底部导航栏
  12. 53多项式08——多元多项式、齐次多项式和对称多项式
  13. 基于Xamarin移动测试云测试你的Android/iOS移动应用
  14. ros buntu安装手册_超详细 ROS安装教程
  15. 【通信原理】第四章 -- 信道
  16. linux 冒号命令,Linux命令之:(冒号)
  17. 钉钉直播 — 为什么直播屏幕共享显示黑屏?(仅针对mac端)
  18. 探索iptables BPF模块的悲惨历程
  19. 开源美狐美颜SDK功能代码分析
  20. 牛顿方法求平方根c语言,C语言之基本算法11—牛顿迭代法求平方根

热门文章

  1. SpringBoot集成Redis--配置自定义的RedisCacheManager
  2. SpringBoot系列: SpringBoot 启动慢的问题
  3. 内存溢出和内存泄漏的区别、产生原因以及解决方案 转
  4. PHP(一) 开发环境搭建
  5. 键盘样式风格有关设置-iOS开发
  6. win8桌面壁纸路径
  7. Spring3MVC+Mybatis3.1框架下的事务
  8. ARP***绑定 linux/windows 下解决方案
  9. ISO9000互联网管理办法
  10. HDU4143-A Simple Question数论题解