template相关
template模板是c++中支持多态的工具,使用模板可以使用户为类或函数声明一种一般的模式,使得该模板试用于任意类型的参数。
函数模板:
定义如下:
template <typename T>
void swap(T& a , T& b){
T temp;
temp = a;
a = b;
b = temp;
}
使用如下:
#include<stdio.h>
int main(){
int num1 = , num2 = ;
swap<int>(num1 , num2);
printf("num1=%d,num2=%d\n",num1,num2);
return ;
}
类模版:
如果有两个类,其功能是相同的,仅仅是因为其数据结构不同,就可以通过声明一个类模版,他可以有一个或者多个虚拟的类型参数;这样就能实现“一类多用”。由于类模板包含类型参数,因此又称为参数化的类。如果说类是对象的抽象,对象是类的实例,则类模板是类的抽象,类是类模板的实例。利用类模板可以建立含各种数据类型的类。
与普通的类相比,类模版主要有下面两处不同:
1、在声明类模版时要加上template<class T>;
2、原有所有的类型名如int,都要换成虚拟类型参数名T;
定义如下:
template<class T>
class Stack{
public:
Stack();
~Stack();
void push(T t);
T pop();
bool isEmpty();
private:
int m_maxSize ;
int m_size ;
T *m_pT ;
} template <class T> Stack<T>::Stack(){
m_maxSize = ;
m_size = ;
m_pT = new T[m_maxSize];
}
template <class T> Stack<T>::~Stack() {
delete [] m_pT ;
} template <class T> void Stack<T>::push(T t) {
m_size++;
m_pT[m_size - ] = t; }
template <class T> T Stack<T>::pop() {
T t = m_pT[m_size - ];
m_size--;
return t;
}
template <class T> bool Stack<T>::isEmpty() {
return m_size == ;
}
类模版使用:
#inlcude<stdio.h> int main(){
Stack<int> intStack;
intStack.push();
intStack.push();
intStack.push(); while (!intStack.isEmpty()) {
printf("num:%d\n", intStack.pop());
}
return ;
}
类模板的类型参数可以有一个或多个,每个类型前面都必须加class,如
template <class T1,class T2> class someclass {…};
模版参数:
模板除了有类型参数,也可以有普通的参数,也可以有默认的模板参数,例如:
template<class T, T def_val>
class Stack{...}
如果想要对类模版的对象数量进行限制,可是使用int参数来配置这个累的最大对象数,如下:
template <class T,int maxsize = > class Stack {
public:
Stack();
~Stack();
void push(T t);
T pop();
bool isEmpty();
private:
T *m_pT;
int m_maxSize;
int m_size;
}; template <class T,int maxsize> Stack<T, maxsize>::Stack(){
m_maxSize = maxsize;
m_size = ;
m_pT = new T[m_maxSize];
}
template <class T,int maxsize> Stack<T, maxsize>::~Stack() {
delete [] m_pT ;
} template <class T,int maxsize> void Stack<T, maxsize>::push(T t) {
m_size++;
m_pT[m_size - ] = t; }
template <class T,int maxsize> T Stack<T, maxsize>::pop() {
T t = m_pT[m_size - ];
m_size--;
return t;
}
template <class T,int maxsize> bool Stack<T, maxsize>::isEmpty() {
return m_size == ;
}
使用如下:
#include <stdio.h>
int main() {
int maxsize = ;
Stack<int,> intStack;
for (int i = ; i < maxsize; i++) {
intStack.push(i);
}
while (!intStack.isEmpty()) {
printf("num:%d\n", intStack.pop());
}
return ;
}
template相关的更多相关文章
- 微信小程序 template添加点击事件
介绍template是微信小程序提供的模板,可以在模板中定义代码片段,然后在不同的地方调用. 简单使用定义template因为项目中可能会需要到不止一个template,所以最好新建一个文件夹来存放t ...
- WPF之Binding深入探讨
原文:http://blog.csdn.net/fwj380891124/article/details/8107646 1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在 ...
- Effective C++ -----条款46:需要类型转换时请为模板定义非成员函数
当我们编写一个class template,而它所提供之“与此template相关的”函数支持“所有参数之隐式类型转换”时,请将那些函数定义为“class template内部的friend函数”.
- 读书笔记_Effective_C++_条款四十六:需要类型转换时请为模板定义非成员函数
这个条款可以看成是条款24的续集,我们先简单回顾一下条款24,它说了为什么类似于operator *这样的重载运算符要定义成非成员函数(是为了保证混合乘法2*SomeRational或者SomeRat ...
- ansible-1 的安装
该文章摘自:http://my.oschina.net/firxiao/blog/343395,该文章制作笔记使用,不做他用,转载请注明原文链接出处 Ansible 默认是基于SSH协议进行通信的. ...
- Effective C++ 的55个条款
看完Effective C++才觉得平时程序设计时需要注意的一些问题,有一定的收获,不过因为没什么项目实践, 并未很深入了解具体情况如何,还需后继实践~ 列举一下55个条款: 1. 视C++为一个语言 ...
- flasCC技术点记录
[待测试特性] 一.C接口导出相关 1.重载函数. 2.虚函数. 3.template相关 二.内存相关 1.as直接往c分配的内存写数据. 2.c直接往as对象写数据. 三.C访问AS 1.访问as ...
- WPF的Binding功能解析
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- 强大的代码生成工具MyGeneration
强大的代码生成工具MyGeneration 转 MyGeneration是一个功能很强大的代码生成工具.通过编写包含各种类型脚本(C#,VB.Net,JScript,VBScript)的模板,通过数据 ...
随机推荐
- vue 组件的书写
简单的来说是 vue组件最核心的就是props和自定义函数,来实现组件的开发 最简单的一个组件 子组件如下: <template> <div class="bgClass& ...
- pandas知识点(基本功能)
1.重新索引 如果reindex会根据新索引重新排序,不存在的则引入缺省: In [3]: obj = Series([4.5,7.2,-5.3,3.6], index=["d", ...
- P1605迷宫
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
- EF上下文对象创建之线程内唯一
在一次请求中,即一个线程内,若是用到EF数据上下文对象,就创建一个,那么会造成数据混乱,每次创建的对象执行相应的数据库操作,此同时,其他的EF对象内获得的数据可能已经是“过期”的了.即这个数据已经变动 ...
- android shape.xml 文件使用
设置背景色可以通过在res/drawable里定义一个xml,如下: <?xml version="1.0" encoding="utf-8"?> ...
- PHP的抽象类、接口的区别和选择
1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过关键字extends继承. 2.接口中不可以声明成员变量(包括类静态变量),但是可以声明类 ...
- Java多线程并发技术
Java多线程并发技术 参考文献: http://blog.csdn.net/aboy123/article/details/38307539 http://blog.csdn.net/ghsau/a ...
- 排查和处理一台被攻击的linux系统及其事后分析
11:40 2018/3/16 发现最近几天服务器流量异常的大,检查了系统命令发现命令最近的修改时间很近,检查dns配置也发现了异常的dns服务器地址. 考虑到事态的严重性,铲掉这个系统重新搭建. 事 ...
- C语言其他知识总结
1.常指针与指针常量 诀窍:观察const修饰的是谁,那谁就不可更改. const int *p;//const 修饰*p,所以*p不能更改.通过指针不可更改指向的值 int const *p;//同 ...
- C++ map 的用法归纳2
[尊重原著: http://blog.csdn.net/zcf1002797280/article/details/7847819] Map是c++的一个标准容器,它提供了很好一对一的关系,在一些程序 ...