当前位置: 首页 > news >正文

类模板定义+用类模板写一个入栈出栈的程序

类模板和函数模板定义类似,都可以看成由模板头和模板体两部分组成。类模板体是一个完整的类。

template<typename 形参名1, template 形参名2,……>

class 类名

{

    // …

};

 

例子:用模板类写一个入栈出栈的程序

#include<iostream>

 

using namespace std;

 

template <typename T, unsignedint N>

class Stack

{

private:

unsignedint index;

T a[N];

public:

Stack():index(){ }

boolpush(const T &value);

T&pop();

boolfull(){ return index == N; }

boolempty(){ return (index == 0); }

unsignedint size(){ return index; }

unsignedint capacity(){ return N; }

};

 

template <typename T, unsigned int N>

bool Stack <  T, N > ::push(const T &value) //特别注意, 在外部编写成员函数时,类名后面指明类型时候只需要类型名,不需要typename关键字!

{

 

if((index <= N - 1) && (index >= 0))

{

a[index++]= value;

returntrue;

}

else

{

returnfalse;

}

 

}

 

template <typename T, unsigned int N>

T& Stack < T, N > ::pop()

{

returna[--index];

}

 

int main()

{

Stack<int, 6> a;//在定义对象的时候也要<>用于指定参数名的数据类型

inti = 10;

 

cout<< "Push Stack......" << endl;

while(!a.full())

{

cout<< "Push " << i << " to Stack" <<endl;

a.push(i++);

}

cout<< endl;

cout<< "Stack data depths: " << a.size() << endl;

cout<< "Stack capacity depths " << a.capacity() <<endl;

cout<< "Pop Stack......" << endl;

while(!a.empty())

{

cout<< "Pop " << a.pop() << "from Stack"<< endl;

}

cout<< endl;

cout<< "Stack data depths: " << a.size() << endl;

cout<< "Stack capacity depths " << a.capacity() <<endl;

 

system("pause");

return0;

}

相关文章:

  • 模板的全特化与偏特化
  • cout
  • cin
  • C++文件输入输出流+输入输出二进制文件(自定义对象)
  • 多态定义
  • 函数重载/遮蔽/隐藏
  • 纯虚函数和抽象类
  • 应用程序主窗体
  • 串口通讯中出现的错误(1)
  • 鼠标事件(鼠标的各种处理事件)
  • 键盘事件(按下CTRL+M 最大化窗口)
  • 定时器事件和随机数(示例代码)
  • 事件过滤器和事件发送
  • SM34项目整编报错处理
  • MTK平台camera bsp学习之android平台架构篇
  • 分享的文章《人生如棋》
  • [译]前端离线指南(上)
  • “大数据应用场景”之隔壁老王(连载四)
  • CSS3 变换
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • mysql外键的使用
  • node.js
  • PHP变量
  • socket.io+express实现聊天室的思考(三)
  • Twitter赢在开放,三年创造奇迹
  • vue-router 实现分析
  • Zepto.js源码学习之二
  • 搭建gitbook 和 访问权限认证
  • 前嗅ForeSpider采集配置界面介绍
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 正则表达式
  • 回归生活:清理微信公众号
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #在 README.md 中生成项目目录结构
  • $.ajax中的eval及dataType
  • (C语言)共用体union的用法举例
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (九)One-Wire总线-DS18B20
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .Family_物联网
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net 7 上传文件踩坑
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET开源快速、强大、免费的电子表格组件
  • @Transient注解
  • @vue/cli脚手架
  • [AIGC] Redis基础命令集详细介绍