模板参数

默认类型参数

函数参数可以设定一个默认值,我们现在可以对类模板的类型参数设定一个默认类型。

指定泛型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++基础】模板参数与模板继承相关推荐

  1. C++ 泛型编程(二):非类型模板参数,模板特化,模板的分离编译

    目录 非类型模板参数 函数模板的特化 类模板的特化 全特化 偏特化 部分参数特化 参数修饰特化 模板分离编译 问题分析 解决方法 非类型模板参数 模板的参数分为两种,一种是非类型参数,一种是类型参数. ...

  2. 浅谈非类型模板参数、模板的特化

    非类型模板参数 1.模板参数分类类型形参与非类型形参. 2.类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称.类型参数也可以给缺省值 3.非类型形参,就是用一个常 ...

  3. C++模板(函数模板,类模板)的基本使用与非类型模板参数与模板的特化

    C++模板 模板初阶 泛型编程 函数模板 函数模板概念 函数模板格式 函数模板的原理 函数模板的实例化 隐式实例化 显式实例化:在函数名后的<>中指定模板参数的实际类型 模板参数的匹配原则 ...

  4. C++基础——关于模板的技巧性基础知识(typename、成员模板、模板的模板参数)

    typename template 成员模板 模板的模板 模板的模板 的实参匹配 本文继续深入探讨模板的基础知识,covers 内容如下: 关键字typename的另一种用法 将成员函数和嵌套类也定义 ...

  5. 【C++模板编程入门】模板介绍、模板定义、函数模板、类模板、模板的继承

    1.模块的引入 1.1.示例代码 #include <iostream> #include <string>using namespace std;//用template声明T ...

  6. C++知识点60——非类型模板参数

    模板参数不仅可以使类型,也可以是值.可以用特定的类型名(比如int)而非typename或者class表示非类型模板参数.当模板被实例化时,非类型模板参数会被一个值而不是类型替代.非类型模板参数 一. ...

  7. c++ 以模板类作为参数的模板

    我想写一个以模板类做为参数的模板,,可惜...没成功. 1.从模板参数到模板:这个简单: //类A是一个模板 template<class T> class A{ } ; //类B,想使用 ...

  8. 模板的模板参数与非类型模板参数

    模板参数-实现容器适配器 我们在学习栈和队列时,通过数组或链表实现,这里C++提供一种实现方式:容器适配器. 用vector或者list为容器,适配出一个stack或queue,具体是如何实现? 基本 ...

  9. 类模板三种类模板参数

    实际上有三种类型模板参数:类型模板参数.模板模板参数(以模板作为模板的参数).无类型模板参数. 1.类型模板参数 类型模板参数是我们使用模板的主要目的.我们可以定义多个类型模板参数: template ...

最新文章

  1. 雷军在小米直面会丢的面子,在年度演讲都找回来了
  2. python小游戏源码-python21点小游戏源码免费下载
  3. Unity UI和引用的管理中心
  4. 图解iPhone开发新手教程
  5. sqlyog怎么设置默认值_物联网卡三网APN设置
  6. 原版英文书籍《Linux命令行》阅读记录5 | 使用命令
  7. 问题:使用jdk11 报错:java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present
  8. JS or C#?不存在的脚本之争
  9. 为何网站天天更新收录还是那么慢吗
  10. Codeforces - 1176E - Cover it! - bfs
  11. 【基于zxing的编解码实战】zxing项目源码解读(2.3.0版本,Android部分)
  12. Python 基础(一):入门必备知识
  13. iperf3网络测试工具下载网址
  14. 零拷贝原理详解(很多大厂面试题哦)
  15. winrar 5.80正式版全球发布
  16. 深信服VMP 内存分配一点看法
  17. 软件开发公司怎么选择比较好?-链环科技
  18. java判定成绩等级_Java编程判断一组学生成绩等级
  19. 常用正则 -- 正则表达式
  20. 梯度下降法python

热门文章

  1. vue基础教程总结篇,用最短的时间入门vue.js(持续更新...)
  2. 常用正则表达式整理【总结】
  3. 宝塔访问域名访问不到
  4. 编译 php mysql 依赖包_MySQL 5.5.15源码包编译安装
  5. linux 查看显卡信号_Linux下如何查看NVIDIA显卡信息
  6. 详细介绍jQuery.outerWidth() 函数具体用法
  7. 面试整理(1):原生ajax
  8. 2.2 .this的绑定规则
  9. JSF中run项目时候Tomcat8启动不了的一种方法
  10. N76E003---看门狗