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