diff --git a/CPlusPlus20ForProgrammers-master/examples/vector/a.out b/CPlusPlus20ForProgrammers-master/examples/vector/a.out new file mode 100755 index 0000000..4d5c954 Binary files /dev/null and b/CPlusPlus20ForProgrammers-master/examples/vector/a.out differ diff --git a/CPlusPlus20ForProgrammers-master/examples/vector/main.cpp b/CPlusPlus20ForProgrammers-master/examples/vector/main.cpp new file mode 100644 index 0000000..64ac219 --- /dev/null +++ b/CPlusPlus20ForProgrammers-master/examples/vector/main.cpp @@ -0,0 +1,13 @@ +#include "shapes.h" +#include "vector.h" + + +int main(){ + + myspace::vector a(10,5.0); + std::cout<< a[15] << "\n"; + + myspace::vector a(10,Cube()); + +return 0; +} diff --git a/CPlusPlus20ForProgrammers-master/examples/vector/main01.cpp b/CPlusPlus20ForProgrammers-master/examples/vector/main01.cpp new file mode 100644 index 0000000..6345365 --- /dev/null +++ b/CPlusPlus20ForProgrammers-master/examples/vector/main01.cpp @@ -0,0 +1,16 @@ +#include "shapes.h" +#include + +int main(){ + Cube a(1.0); + Cube b(3.0); + + Cube d{Cube()}; + Cube c(a); + + c[0] = 100.0; + + std::cout << "a.data-->"<< a[0] << " c.data--->" << c[0]; + +return 0; +} diff --git a/CPlusPlus20ForProgrammers-master/examples/vector/shapes.cpp b/CPlusPlus20ForProgrammers-master/examples/vector/shapes.cpp new file mode 100644 index 0000000..2c5e6f0 --- /dev/null +++ b/CPlusPlus20ForProgrammers-master/examples/vector/shapes.cpp @@ -0,0 +1,48 @@ + +#include "shapes.h" + + +double& Cube::operator() (int i){ + try { + if(i==1) + return L; + if (i==2) + return W; + if (i==3) + return H; + if (i<1 || i > 3) + throw(i); + } + catch(int i){ + std::cout << "out of index" << i << "\n"; + exit(0); + } + return tmp; + } + + +Cube::Cube(double _L , double _W , double _H, long int _N ):N(_N){ + SetL(_L); + Data = new double[N]; + Data[0] = _L; + //std::cout << "Constructor was run!\n"; +} + + +Cube::Cube(const Cube &c){ + L = c.L; + W = c.W; + H = c.H; + N = c.N; + Data = new double[N]; + for (int i{0}; i < N ; i++ ) + Data[i] = c.Data[i]; +} + +void Cube::SetL(double _L){ + L = _L; +} + +const double& Cube::GetL() { + return L; +} diff --git a/CPlusPlus20ForProgrammers-master/examples/vector/shapes.h b/CPlusPlus20ForProgrammers-master/examples/vector/shapes.h new file mode 100644 index 0000000..cc41669 --- /dev/null +++ b/CPlusPlus20ForProgrammers-master/examples/vector/shapes.h @@ -0,0 +1,24 @@ +#include + +class Cube { + public: +explicit Cube(double _L = 0, double _W = 0, double _H = 0, long int N = 1); + Cube(const Cube& c); + + ~Cube(){ + std::cout << "Destructor was run!\n"; + delete [] Data; + } + void SetL(double _L); + + const double& GetL(); + double& operator() (int i); + double& operator[] (int i){return Data[i];}; + + private: + double L,W,H; + double* Data; + double tmp; + int N ; +}; + diff --git a/CPlusPlus20ForProgrammers-master/examples/vector/vector.h b/CPlusPlus20ForProgrammers-master/examples/vector/vector.h new file mode 100644 index 0000000..9e2a68e --- /dev/null +++ b/CPlusPlus20ForProgrammers-master/examples/vector/vector.h @@ -0,0 +1,54 @@ +#include + +namespace myspace { +template +class vector{ + public: + vector(){} + vector(int _N, T _Val); + ~vector(); + T operator[] (int i); + void resize(); + int size(){ + return N; + } + ; + protected: + T** data; + int N; +}; + + +template +vector::vector(int _N, T _Val ):N(_N){ + data = new T*[N]; + for (int i{0}; i < N; i++){ + data[i] = new T(_Val); + } +} + +template +vector::~vector(){ + delete [] data; +} + +template +T vector::operator[] (int i){ + try { + if (i>=0 && i < N){ + return *data[i]; + } + else + throw(i); + } + catch(int i){ + std::cout << "out of range, try to access "<< i << " out of " << N <<"\n"; + exit(-1); + } + } + +/// end of namespace /// +} + + +