Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. #pragma once
  2. #include <iostream>
  3. #include <string>
  4. #include "VectError.h"
  5.  
  6. template<typename T>class Vect {
  7. public:
  8. explicit Vect() :first(0), last(0) {}
  9. explicit Vect(size_t _n, const T& _v = T()) {//интересующая часть, как
  10. //работает конструктор T(), откуда он??
  11. Allocate(_n);
  12. for (size_t i = 0; i < _n; ++i)
  13. *(first + i) = _v;
  14. }
  15. Vect(const Vect&);
  16. Vect& operator=(const Vect&);
  17. ~Vect()
  18. {
  19. #ifdef DEBUG
  20. cout << "Destructor of " << markName << endl;
  21. #endif // DEBUG
  22. Destroy();
  23. first = 0, last = 0;
  24. }
  25. void mark(std::string& name) { markName = name; }
  26. std::string mark()const { return markName; }
  27. size_t size()const;
  28. T* begin()const { return first; }
  29. T* end()const { return last; }
  30.  
  31. T& operator[](size_t i);
  32. void insert(T* _P, const T& _x);
  33. void push_back(const T& _x);
  34. void pop_back();
  35. void show()const;
  36. protected:
  37. void Allocate(size_t _n) {
  38. first = new T[_n * sizeof(T)];
  39. last = first + _n;
  40. }
  41. void Destroy() {
  42. for (T* p = first; p != last; ++p)p->~T();
  43. delete[] first;
  44. }
  45. T* first;
  46. T* last;
  47. std::string markName;
  48. };
  49.  
  50. #include "stdafx.h"
  51. #include <iostream>
  52. #include <conio.h>
  53. #include "Vect.h"
  54. #include <string>
  55. ...
  56. int main()
  57. {
  58. try
  59. {
  60. Vect<int> v1(10);// вызывается конструктор
  61. //explicit Vect(size_t _n, const T& _v = T())...
  62. v1.mark(string ("v1"));
  63. size_t n = v1.size();
  64. for (int i = 0; i < n; ++i)v1[i] = i + 1;
  65. v1.show();
  66. ....
  67. }
  68.  
  69. explicit Vect(size_t _n, const T& _v = T()) {//интересующая часть, как
  70. //работает конструктор T(), откуда он??
  71. Allocate(_n);
  72. for (size_t i = 0; i < _n; ++i)
  73. *(first + i) = _v;
  74. }
  75.  
  76. Vect<int> v1(10);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement