C++模板基本概念及语法
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++模板基本概念及语法相关推荐
- C++ 基础概念、语法和易错点整理
目录 基础知识 构造函数与析构函数 虚函数 继承 单例模式 重载.隐藏和重写(覆盖) vector 扩容机制应注意的问题 STL 迭代器 前言 快秋招了,专门用一篇博客整理一下 C++ 的一些基础概念 ...
- C++函数模板的详细讲解【函数模板的概念、用法及其模板函数的概念知识】
目录 前言 C++函数模板的使用 函数模板语法 1.模板说明 2.函数定义 3.函数模板调用 模板函数 函数模板和函数重载 嵌套使用函数模板 函数模板和普通函数在一起,调用规则 在Linux中反汇编查 ...
- 模板的概念以及函数模板
1.模板的概念 模板就是建立通用的模具,其中函数模板可以传进不同类型的实参,大大提高函数的复用性 特点:模板不可以直接使用,要先进行声明,它只是一个通用框架 模板并不是万能的 2.函数模板 c++的一 ...
- C++模板的概念<>(泛型编程)
在阅读RXW源码的时候,老是看到<>这种成对的括号,不懂何意,查了一下原来是C++的模板,, 但是看了我还是不明觉厉,,有时间一定要系统学习下C++视频课程 20220201 nnd,找了 ...
- JavaScript从入门到精通之入门篇(一)概念与语法
入门篇大纲 第一部分 概念与语法 1.JavaScript的历史 2.基本概念 3.JavaScript的使用.调试和异常处理 4.基本词法和变量 5.数据类型和类型转换 6.运算符 算数运算符 赋值 ...
- Java中抽象类和接口在概念、语法和应用上的区别和关系
2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...
- YAML第一章 基本概念及语法
YAML第一章 基本概念及语法 简介 本文对YAML的基本概念及语法进行了详细的分析,尤其是对YAML的语法进行了详细的阐述,旨在希望通过本文能对YAML有一个基本的了解,能够书写YAML文档. 声明 ...
- 第八章第一节:Java继承之继承概念、语法、成员访问和super关键字
文章目录 一:继承的概念及语法 (1)什么是继承 (2)Java继承语法 二:成员访问 (1)子类访问父类的成员变量 (2)子类访问父类的成员方法 三:super关键字 (1)super关键字 A:作 ...
- MDX基本概念和语法
MDX基本概念和语法 1 MDX简介 1.1 MDX重要概念 1.2 维度(Dimensions).级别(Levels).成员(Members)和度量值(Measures) 1.3 轴维度和切片器维度 ...
最新文章
- html css百分比效果,css百分比不起作用是什么原因?
- 洛谷 P1149 火柴棒等式
- 内存泄露检测工具之DMalloc
- 分类与回归树(CART)相关知识
- java中Date与DateFormat的格式输出
- 使用.net Stopwatch class 来分析你的代码
- Vuejs:组件 slot 内容分发
- TensorFlow7-多元线性回归模型
- python爬取歌词_利用Python网络爬虫抓取网易云音乐歌词
- MFC 教程【14_SOCKET类的设计和实现】
- Android三种风格的底部导航栏
- 53多项式08——多元多项式、齐次多项式和对称多项式
- 基于Xamarin移动测试云测试你的Android/iOS移动应用
- ros buntu安装手册_超详细 ROS安装教程
- 【通信原理】第四章 -- 信道
- linux 冒号命令,Linux命令之:(冒号)
- 钉钉直播 — 为什么直播屏幕共享显示黑屏?(仅针对mac端)
- 探索iptables BPF模块的悲惨历程
- 开源美狐美颜SDK功能代码分析
- 牛顿方法求平方根c语言,C语言之基本算法11—牛顿迭代法求平方根