C++笔记6.00

类模板的应用源代码

设计一个数组模板类,完成对不同类型数组的管理

myArray.hpp

  1. #ifndef MYARRAY_HPP_INCLUDED  
  2. #define MYARRAY_HPP_INCLUDED  
  3. #include <iostream>  
  4.   
  5. using namespace std;  
  6. template<class T>  
  7. class MyArray  
  8. {  
  9. private:  
  10.     T *addr;  
  11.     int capacity;  
  12.     int size;  
  13. public:  
  14.     MyArray(int capacity);  
  15.     MyArray(const MyArray &ob);  
  16.     ~MyArray();  
  17.   
  18.     //尾插法  
  19.     void push_back(const T &val);  
  20.     //遍历数组  
  21.     void printArray(void);  
  22. };  
  23.   
  24. template<class T>  
  25. MyArray<T>::MyArray(int capacity)  
  26. {  
  27.     //对于 自定义数据类型 new person[10] 数组中的每个元素 都会调用无参构造  
  28.     this->addr = new T[capacity];  
  29.     this->capacity = capacity;  
  30.     this->size = 0;  
  31. }  
  32.   
  33. template<class T>  
  34. MyArray<T>::MyArray(const MyArray &ob)  
  35. {  
  36.     this->capacity = ob.capacity;  
  37.     this->addr = new T[this->capacity];  
  38.   
  39.     int i = 0;  
  40.     for(i = 0;i<ob.size;i++)  
  41.     {  
  42.         this->addr[i] =ob.addr[i];  
  43.     }  
  44.   
  45.     this->size = ob.size;  
  46. }  
  47.   
  48. template<class T>  
  49. MyArray<T>::~MyArray()  
  50. {  
  51.     if(this->addr != NULL)  
  52.     {  
  53.         delete[] this->addr;  
  54.         this->addr = NULL;  
  55.     }  
  56. }  
  57.   
  58. template<class T>  
  59. void MyArray<T>::push_back(const T &val)  
  60. {  
  61.     //数组的实际个数size不能超过capacity  
  62.     if(this->size == this->capacity)  
  63.     {  
  64.         cout << "容器已满" << endl;  
  65.         return;  
  66.     }  
  67.     this->addr[this->size] = val;  
  68.     this->size++;  
  69. }  
  70.   
  71. template<class T>  
  72. void MyArray<T>::printArray(void)  
  73. {  
  74.     int i = 0;  
  75.     for(i=0;i<this->size;i++)  
  76.     {  
  77.         //如果输出的是自定义数据必须重载运算符  
  78.         cout << this->addr[i] << " ";  
  79.     }  
  80.     cout << endl;  
  81. }  
  82.   
  83. #endif // MYARRAY_HPP_INCLUDED  

main.cpp

  1. #include <iostream>  
  2. #include"myArray.hpp"  
  3. #include <cstring>  
  4.   
  5. using namespace std;  
  6.   
  7. class Person  
  8. {  
  9.     friend ostream& operator<<(ostream &out, const Person&ob);  
  10. private:  
  11.     string name;  
  12.     int age;  
  13. public:  
  14.     Person ()  
  15.     {  
  16.   
  17.     }  
  18.     Person(string name, int age)  
  19.     {  
  20.         this->name = name;  
  21.         this->age = age;  
  22.     }  
  23. };  
  24.   
  25. ostream& operator<<(ostream &out, const Person&ob)  
  26. {  
  27.     out << "name = " << ob.name << ", age = " << ob.age << endl;  
  28.     return out;  
  29. }  
  30. int main()  
  31. {  
  32.     MyArray<char> ob(10);  
  33.     ob.push_back('a');  
  34.     ob.push_back('b');  
  35.     ob.push_back('c');  
  36.     ob.push_back('d');  
  37.   
  38.     ob.printArray();  
  39.   
  40.     MyArray<int> ob2(10);  
  41.     ob2.push_back(10);  
  42.     ob2.push_back(20);  
  43.     ob2.push_back(30);  
  44.     ob2.push_back(40);  
  45.   
  46.     ob2.printArray();  
  47.   
  48.     //存放自定义数据  
  49.     MyArray<Person> ob3(10);  
  50.     ob3.push_back(Person ("阿尔贝尔",114514));  
  51.     ob3.push_back(Person ("库鲁特",22222));  
  52.     ob3.push_back(Person ("吱吱吱",678));  
  53.     ob3.push_back(Person ("帮大忙了",0));  
  54.   
  55.     ob3.printArray();  
  56.   
  57.     return 0;  
  58. }  

“C++笔记6.00”的一个回复

发表评论

邮箱地址不会被公开。 必填项已用*标注