Advertisement
Pella86

Class vector redefine 2

Oct 10th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.26 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdint>
  3. #include <vector>
  4. #include <cmath>
  5. #include <numeric>
  6.  
  7. using namespace std;
  8.  
  9. template<typename T, size_t dim>
  10. class Vector{
  11.     T coords[dim];
  12. public:
  13.     Vector() {
  14.         for(size_t i = 0; i < dim; i++){
  15.             coords[i] = T(0);
  16.         }
  17.     }
  18.  
  19.     T operator[](size_t index) const {
  20.         return coords[index];
  21.     }
  22.  
  23.     T& operator[](size_t index) {
  24.         return coords[index];
  25.     }
  26.  
  27.     T&  operator=(const T& other){
  28.         if(this != other){
  29.             for(size_t i = 0; i < dim; i++){
  30.                 coords[i] = other[i];
  31.             }
  32.         }
  33.         return *this;
  34.     }
  35.  
  36.     double length(){
  37.         return sqrt(accumulate(coords, coords + dim, 0));
  38.     }
  39.  
  40.     friend ostream& operator<<(ostream& os, const Vector<T, dim> &other){
  41.         os << "(";
  42.         for(size_t i = 0; i < dim; i++){
  43.             os << other[i];
  44.             if(i != dim - 1){
  45.                 os << ",";
  46.             }
  47.         }
  48.         os << ")";
  49.         return os;
  50.     }
  51. };
  52.  
  53. #define vDIM 2
  54.  
  55. template<typename T>
  56. class V2 : public Vector<T, vDIM> {
  57. public:
  58.     V2(T x, T y) {
  59.         Vector<T, vDIM>::operator[](0) = x;
  60.         Vector<T, vDIM>::operator[](1) = y;
  61.     }
  62.  
  63.     T x(){ return Vector<T, vDIM>::operator[](0);}
  64.     void x(T ix){ Vector<T, vDIM>::operator[](0) = ix;}
  65.     T y(){ return Vector<T, vDIM>::operator[](1);}
  66.     void y(T iy){ Vector<T, vDIM>::operator[](1) = iy;}
  67. };
  68.  
  69. using V2d = V2<double> ;
  70.  
  71. #define vDIM 3
  72.  
  73. template<typename T>
  74. class V3 : public Vector<T, vDIM> {
  75. public:
  76.     V3(T x, T y, T z) {
  77.         Vector<T, vDIM>::operator[](0) = x;
  78.         Vector<T, vDIM>::operator[](1) = y;
  79.         Vector<T, vDIM>::operator[](2) = z;
  80.     }
  81.  
  82.     T x(){ return Vector<T, vDIM>::operator[](0);}
  83.     void x(T ix){ Vector<T, vDIM>::operator[](0) = ix;}
  84.     T y(){ return Vector<T, vDIM>::operator[](1);}
  85.     void y(T iy){ Vector<T, vDIM>::operator[](1) = iy;}
  86.     T z(){ return Vector<T, vDIM>::operator[](2);}
  87.     void z(T iz){ Vector<T, vDIM>::operator[](2) = iz;}
  88.  
  89. };
  90.  
  91. using V3d = V3<double>;
  92.  
  93. #define vDIM 4
  94.  
  95. template<typename T>
  96. class V4 : public Vector<T, vDIM> {
  97. public:
  98.     V4(T x, T y, T z, T w) {
  99.         Vector<T, vDIM>::operator[](0) = x;
  100.         Vector<T, vDIM>::operator[](1) = y;
  101.         Vector<T, vDIM>::operator[](2) = z;
  102.         Vector<T, vDIM>::operator[](3) = w;
  103.     }
  104.  
  105.     T x(){ return Vector<T, vDIM>::operator[](0);}
  106.     void x(T ix){ Vector<T, vDIM>::operator[](0) = ix;}
  107.     T y(){ return Vector<T, vDIM>::operator[](1);}
  108.     void y(T iy){ Vector<T, vDIM>::operator[](1) = iy;}
  109.     T z(){ return Vector<T, vDIM>::operator[](2);}
  110.     void z(T iz){ Vector<T, vDIM>::operator[](2) = iz;}
  111.     T w(){ return Vector<T, vDIM>::operator[](3);}
  112.     void w(T iw){ Vector<T, vDIM>::operator[](3) = iw;}
  113. };
  114.  
  115. using V4d = V4<double>;
  116.  
  117. int main()
  118. {
  119.     cout << "Test assignment" << endl;
  120.     V2<float> v(4.0, 5.0);
  121.     cout << v << endl;
  122.     v.x(7.0);
  123.     cout << v << endl;
  124.     v[0] = 8.0;
  125.     cout << v << endl;
  126.  
  127.     cout << "Test length:" << endl;
  128.  
  129.     V2d vet{1.0, 2.0};
  130.     cout << vet << endl;
  131.  
  132.     cout << vet.length() << endl;
  133.  
  134.     V4d v4{0, 1, 2, 3};
  135.     cout << v4 << endl;
  136.     cout << v4.length() << endl;
  137.  
  138.     return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement