示例 加法

类外实现函数时,必须使用显示指定模板

  1. #include<iostream>
  2. using namespace std;
  3. template<class T>
  4. class A {
  5. private:
  6. T first;
  7. T second;
  8. public:
  9. A(T a, T b): first(a), second(b) {};
  10. void add();
  11. };
  12. template<class T>
  13. void A<T>::add() {
  14. cout << first + second<<endl;
  15. }
  16. void testA() {
  17. A<int> a(1, 2);
  18. a.add();
  19. A<double> b(2.5,3);
  20. b.add();
  21. }
  22. int main() {
  23. testA();
  24. }

示例2 封装Stack

  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4. template<class T>
  5. class Stack {
  6. private:
  7. vector<T> elems;
  8. public:
  9. void push(T const&);
  10. void pop();
  11. T top() const;
  12. bool empty() const { return elems.empty(); }
  13. };
  14. template<class T>
  15. void Stack<T>::push(T const& elem) {
  16. elems.push_back(elem);
  17. }
  18. template<class T>
  19. void Stack<T>::pop() {
  20. if (elems.empty()) {
  21. throw out_of_range("Stack<>::pop(): empty stack");
  22. }
  23. elems.pop_back();
  24. }
  25. template<class T>
  26. T Stack<T>::top() const {
  27. if (elems.empty()) {
  28. throw out_of_range("Stack<>::top(): empty stack");
  29. }
  30. return elems.back();
  31. }
  32. void testStack() {
  33. Stack<int> intStack;
  34. intStack.push(10);
  35. intStack.push(20);
  36. intStack.push(30);
  37. cout << intStack.top() << endl;
  38. intStack.pop();
  39. cout << intStack.top() << endl;
  40. intStack.pop();
  41. cout << intStack.top() << endl;
  42. intStack.pop();
  43. }
  44. int main() {
  45. testStack();
  46. try {
  47. Stack<string> strStack;
  48. strStack.push("Hello,world");
  49. strStack.push("Hello,C++");
  50. cout << strStack.top() << endl;
  51. strStack.pop();
  52. cout << strStack.top() << endl;
  53. strStack.pop();
  54. strStack.pop();
  55. }
  56. catch (exception const& ex) {
  57. cout << ex.what() << endl;
  58. return 1;
  59. }
  60. return 0;
  61. }

image.png