设为首页 加入收藏

TOP

C++模板Template(三)
2019-09-03 02:42:17 】 浏览:147
Tags:模板 Template
top()const{ 45 if (numElems <= 0) { 46 throw std::out_of_range("Stack<>::top(): empty stack"); 47 } 48 return elems[numElems-1]; // 返回最后一个元素 49 } 50 51 #endif
复制代码

  TemplateDemo.cpp

复制代码
 1 #include<iostream.h>
 2 #include <iostream>
 3 #include <string>
 4 #include <cstdlib>
 5 #include "TemplateDemo.h"
 6 
 7 int main(){
 8     try {
 9         Stack<int,20>  int20Stack;  // 可以存储20个int元素的栈
10         Stack<int,40>  int40Stack;  // 可以存储40个int元素的栈
11         Stack<std::string,40> stringStack; // 可存储40个string元素的栈
12 
13         // 使用可存储20个int元素的栈
14         int20Stack.push(7);
15         std::cout << int20Stack.top() << std::endl;    //7
16         int20Stack.pop();
17 
18         // 使用可存储40个string的栈
19         stringStack.push("hello");
20         std::cout << stringStack.top() << std::endl;    //hello
21         stringStack.pop();    
22         stringStack.pop();    //Exception: Stack<>::pop<>: empty stack
23         return 0;
24     }
25     catch (std::exception const& ex) {
26         std::cerr << "Exception: " << ex.what() << std::endl;
27         return EXIT_FAILURE;  // 退出程序且有ERROR标记
28     }
29 }
复制代码

  运行结果:

    

 非类型形参演示示例2:

  TemplateDemo01.h

复制代码
 1 #ifndef TEMPLATE_DEMO_O1
 2 #define TEMPLATE_DEMO_01
 3 
 4 template<typename T> class CompareDemo{
 5     public:
 6         int compare(const T&, const T&);
 7 };
 8 
 9 template<typename T> 
10 int CompareDemo<T>::compare(const T& a,const T& b){
11     if((a-b)>0)
12         return 1;
13     else if((a-b)<0)
14         return -1;
15     else
16         return 0;
17 }
18 
19 #endif
复制代码

  TemplateDemo01.cpp

复制代码
1 #include<iostream.h>
2 #include "TemplateDemo01.h"
3 
4 void main(){
5     CompareDemo<int> cd;
6     cout<<cd.compare(2,3)<<endl;
7 }
复制代码

  运行结果:     -1 

复制代码
1 #include<iostream.h>
2 #include "TemplateDemo01.h"
3 
4 void main(){
5     CompareDemo<double> cd;
6     cout<<cd.compare(3.2,3.1)<<endl;
7 }
复制代码

  运行结果:      1  

  TemplateDemo01.h 改动如下:

复制代码
 1 #ifndef TEMPLATE_DEMO_O1
 2 #define TEMPLATE_DEMO_01
 3 
 4 template<typename T> class CompareDemo{
 5     public:
 6         int compare(T&, T&);
 7 };
 8 
 9 template<typename T> 
10 int CompareDemo<T>::compare(T& a,T& b){
11     if((a-b)>0)
12         return 1;
13     else if((a-b)<0)
14         return -1;
15     else
16         return 0;
17 }
18 
19 #endif
复制代码

  TempalteDemo01.cpp

复制代码
1 #include<iostream.h>
2 #include "TemplateDemo01.h"
3 
4 void main(){
5     CompareDemo<int> cd;
6     int a=2,b=3;
7     cout<<cd.compare(a,b)<<endl;
8 }
复制代码

 

 非类型形参演示示例3:

  TemplateDemo02.cpp

复制代码
 1 #include<iostream.h>
 2 
 3 template<typename T>
 4 const T& max(const T& a,const T& b){
 5     return a>b ? a:b;
 6 }
 7 
 8 void main(){
 9     cout<<max(2.1,2.2)<<endl;//模板实参被隐式推演成double
10     cout<<max<double>(2.1,2.2)<<endl;//显示指定模板参数。
11     cout<<max<int>(2.1,2.2)<<endl;//显示指定的模板参数,会将函数函数直接转换为int。
12 }
复制代码

  运行结果:

       

cout<<max<int>(2.1,2.2)<<endl;//显示指定的模板参数,会将函数函数直接转换为int。此语句会出现警告:
复制代码
1 --------------------Configuration: TemplateDemo02 - Win32 Debug--------------------
2 Compiling...
3 Template
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 3/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇初级线段树小结 下一篇输入输出的优化问题

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目