【C++基础】模板参数与模板继承
模板参数
默认类型参数
函数参数可以设定一个默认值,我们现在可以对类模板的类型参数设定一个默认类型。
指定泛型Stack的默认类型参数为 int
template<typename T = int>
class Stack{...
};
当我们这样定义一个对象时:
Stack<> stack;
使用默认的方式,或者说隐式的方式,实例化了一个stack对象。
这样的好处是:指定默认类型之后,使用者就没必要去写了。
非类型参数
在模板前缀中使用非类型参数。
实例化模板时,非类型实参应该是对象。
如下:
template<typename T, int capacity>
class Stack {...
private:T elements[capacity];int size;
};
Stack<char, 100> charStack;
如同std里面的array的初始化:std::array<int,100>;
除了基本数据类型外,非类型实参是对象的时候是这样的;
template<typename T, Color c>
class Label {...
};
Color color(0,0,255);
Label<char,color> label;
注意,参数默认值必须是在最右边,当然我们也可以全部定义一个默认值,这样就不会有问题了。
注意模板成员函数的声明也需要进行修改。
就是这样:
//泛型化
template <typename T = char,int N = 100>
//编写StackOfIntegers类
class Stack {private:T elements[N];int size{ 0 };
public:bool empty();T peek();T push(T value);T pop();int getSize();Stack();
};
template <typename T, int N>
Stack<T,N>::Stack() {size = 0;for (auto& i : elements) {i = 0;}
}
模板继承
关于模板继承的几个原则:
1、普通类可从类模板实例继承。一个模板实例化之后就是一个类了,类与类之间可以继承。
2、模板可从普通类继承
3、类模板可继承类模板
也就是说,一个类是不可以从一个模板继承的,其他的三种组合方式都是可以的。
何时何地使用模板
使用别人写好的模板库时
对不同类型的数据做类似处理 (算法、容器、遍历等)
OOP or GP
泛型编程在C++中广泛使用,经常可以取代面向对象编程。
几乎整个C++标准库都依赖于泛型编程。
在C++标准库较少使用继承和运行时多态。异常、字符串和IO流中使用了较多的继承。
【C++基础】模板参数与模板继承相关推荐
- C++ 泛型编程(二):非类型模板参数,模板特化,模板的分离编译
目录 非类型模板参数 函数模板的特化 类模板的特化 全特化 偏特化 部分参数特化 参数修饰特化 模板分离编译 问题分析 解决方法 非类型模板参数 模板的参数分为两种,一种是非类型参数,一种是类型参数. ...
- 浅谈非类型模板参数、模板的特化
非类型模板参数 1.模板参数分类类型形参与非类型形参. 2.类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称.类型参数也可以给缺省值 3.非类型形参,就是用一个常 ...
- C++模板(函数模板,类模板)的基本使用与非类型模板参数与模板的特化
C++模板 模板初阶 泛型编程 函数模板 函数模板概念 函数模板格式 函数模板的原理 函数模板的实例化 隐式实例化 显式实例化:在函数名后的<>中指定模板参数的实际类型 模板参数的匹配原则 ...
- C++基础——关于模板的技巧性基础知识(typename、成员模板、模板的模板参数)
typename template 成员模板 模板的模板 模板的模板 的实参匹配 本文继续深入探讨模板的基础知识,covers 内容如下: 关键字typename的另一种用法 将成员函数和嵌套类也定义 ...
- 【C++模板编程入门】模板介绍、模板定义、函数模板、类模板、模板的继承
1.模块的引入 1.1.示例代码 #include <iostream> #include <string>using namespace std;//用template声明T ...
- C++知识点60——非类型模板参数
模板参数不仅可以使类型,也可以是值.可以用特定的类型名(比如int)而非typename或者class表示非类型模板参数.当模板被实例化时,非类型模板参数会被一个值而不是类型替代.非类型模板参数 一. ...
- c++ 以模板类作为参数的模板
我想写一个以模板类做为参数的模板,,可惜...没成功. 1.从模板参数到模板:这个简单: //类A是一个模板 template<class T> class A{ } ; //类B,想使用 ...
- 模板的模板参数与非类型模板参数
模板参数-实现容器适配器 我们在学习栈和队列时,通过数组或链表实现,这里C++提供一种实现方式:容器适配器. 用vector或者list为容器,适配出一个stack或queue,具体是如何实现? 基本 ...
- 类模板三种类模板参数
实际上有三种类型模板参数:类型模板参数.模板模板参数(以模板作为模板的参数).无类型模板参数. 1.类型模板参数 类型模板参数是我们使用模板的主要目的.我们可以定义多个类型模板参数: template ...
最新文章
- 雷军在小米直面会丢的面子,在年度演讲都找回来了
- python小游戏源码-python21点小游戏源码免费下载
- Unity UI和引用的管理中心
- 图解iPhone开发新手教程
- sqlyog怎么设置默认值_物联网卡三网APN设置
- 原版英文书籍《Linux命令行》阅读记录5 | 使用命令
- 问题:使用jdk11 报错:java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present
- JS or C#?不存在的脚本之争
- 为何网站天天更新收录还是那么慢吗
- Codeforces - 1176E - Cover it! - bfs
- 【基于zxing的编解码实战】zxing项目源码解读(2.3.0版本,Android部分)
- Python 基础(一):入门必备知识
- iperf3网络测试工具下载网址
- 零拷贝原理详解(很多大厂面试题哦)
- winrar 5.80正式版全球发布
- 深信服VMP 内存分配一点看法
- 软件开发公司怎么选择比较好?-链环科技
- java判定成绩等级_Java编程判断一组学生成绩等级
- 常用正则 -- 正则表达式
- 梯度下降法python
热门文章
- vue基础教程总结篇,用最短的时间入门vue.js(持续更新...)
- 常用正则表达式整理【总结】
- 宝塔访问域名访问不到
- 编译 php mysql 依赖包_MySQL 5.5.15源码包编译安装
- linux 查看显卡信号_Linux下如何查看NVIDIA显卡信息
- 详细介绍jQuery.outerWidth() 函数具体用法
- 面试整理(1):原生ajax
- 2.2 .this的绑定规则
- JSF中run项目时候Tomcat8启动不了的一种方法
- N76E003---看门狗