diff --git a/CPlusPlus20ForProgrammers-master/examples/vector/a.out b/CPlusPlus20ForProgrammers-master/examples/vector/a.out index 14ad967..39cbebf 100755 Binary files a/CPlusPlus20ForProgrammers-master/examples/vector/a.out and b/CPlusPlus20ForProgrammers-master/examples/vector/a.out differ diff --git a/CPlusPlus20ForProgrammers-master/examples/vector/main01_shapes_defaultConstructor.cpp b/CPlusPlus20ForProgrammers-master/examples/vector/main01_shapes_defaultConstructor.cpp new file mode 100644 index 0000000..c0092c9 --- /dev/null +++ b/CPlusPlus20ForProgrammers-master/examples/vector/main01_shapes_defaultConstructor.cpp @@ -0,0 +1,16 @@ +#include "shapes_defaultConstructor.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_defaultConstructor.cpp b/CPlusPlus20ForProgrammers-master/examples/vector/shapes_defaultConstructor.cpp new file mode 100644 index 0000000..28d8717 --- /dev/null +++ b/CPlusPlus20ForProgrammers-master/examples/vector/shapes_defaultConstructor.cpp @@ -0,0 +1,39 @@ + +#include "shapes_defaultConstructor.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"; +} + + + +void Cube::SetL(double _L){ + L = _L; +} + +const double& Cube::GetL() { + return L; +} diff --git a/CPlusPlus20ForProgrammers-master/examples/vector/shapes_defaultConstructor.h b/CPlusPlus20ForProgrammers-master/examples/vector/shapes_defaultConstructor.h new file mode 100644 index 0000000..fddba65 --- /dev/null +++ b/CPlusPlus20ForProgrammers-master/examples/vector/shapes_defaultConstructor.h @@ -0,0 +1,23 @@ +#include + +class Cube { + public: +explicit Cube(double _L = 0, double _W = 0, double _H = 0, long int N = 1); + + ~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 index d74f70f..4036f5e 100644 --- a/CPlusPlus20ForProgrammers-master/examples/vector/vector.h +++ b/CPlusPlus20ForProgrammers-master/examples/vector/vector.h @@ -14,25 +14,21 @@ class vector{ } ; protected: - T** data; + T* data; int N; }; template vector::vector(int _N, T _Val ):N(_N){ - data = new T*[N]; + data = new T[N]; for (int i{0}; i < N; i++){ - data[i] = new T(_Val); + data[i] = T(_Val); } } template vector::~vector(){ - for (int i{0};i < N; i++){ - delete data[i]; - std :: cout << i << "\n"; - } delete [] data; } @@ -40,7 +36,7 @@ template T vector::operator[] (int i){ try { if (i>=0 && i < N){ - return *data[i]; + return data[i]; } else throw(i); diff --git a/CPlusPlus20ForProgrammers-master/examples/vector/vector_pointer.h b/CPlusPlus20ForProgrammers-master/examples/vector/vector_pointer.h new file mode 100644 index 0000000..d74f70f --- /dev/null +++ b/CPlusPlus20ForProgrammers-master/examples/vector/vector_pointer.h @@ -0,0 +1,58 @@ +#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(){ + for (int i{0};i < N; i++){ + delete data[i]; + std :: cout << i << "\n"; + } + 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 /// +} + + +