This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
|
cpp:vector_overloading_binary_operators2 [2019/05/16 08:33] gthanos |
cpp:vector_overloading_binary_operators2 [2019/05/20 08:30] gthanos |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ===== Υπερφόρτωση δυαδικών τελεστών μπορούν να υλοποιηθούν μόνο ως μέλη της κλάσης ===== | ===== Υπερφόρτωση δυαδικών τελεστών μπορούν να υλοποιηθούν μόνο ως μέλη της κλάσης ===== | ||
| - | Παρακάτω θα δούμε την υπερφόρτωση τελεστών που μπορούν να υλοποιηθούν μόνο ως μέλη της κλάσης. Οι τελεστές περιγράφονται στον παρακάτω πίνακα. | + | Σε αυτή την ενότητα, |
| ^ Τελεστής | ^ Τελεστής | ||
| - | | %%=%% | // | + | | %%=%% | // |
| | %%[ ]%% | // | | %%[ ]%% | // | ||
| - | | %%+=%% | + | | %%+=%% |
| | %%+=%% | | %%+=%% | ||
| - | | %%-=%% | + | | %%-=%% |
| - | | %%-=%% | + | | %%-=%% |
| - | | %%*=%% | + | | %%*=%% |
| - | | %%*=%% | + | | %%*=%% |
| - | | %%/ | + | | %%/ |
| - | | %% %=%% | // | + | | %% %=%% | // |
| - | | %%<< | + | | %%<< |
| - | | %%>> | + | | %%>> |
| <code cpp Vector.cpp> | <code cpp Vector.cpp> | ||
| Line 25: | Line 25: | ||
| class Vector { | class Vector { | ||
| int *array; | int *array; | ||
| - | | + | int size; |
| | | ||
| public: | public: | ||
| - | Vector(unsigned | + | Vector(int length=0); |
| - | Vector(const Vector &v); | + | Vector(const Vector& v); |
| Vector(const Vector *v); | Vector(const Vector *v); | ||
| ~Vector(); | ~Vector(); | ||
| - | | + | int length() const; |
| - | int & | + | int & |
| int find(int a) const; | int find(int a) const; | ||
| // if not element not found | // if not element not found | ||
| Line 39: | Line 39: | ||
| void print() const; | void print() const; | ||
| void print(string &msg) const; | void print(string &msg) const; | ||
| - | + | | |
| /* binary operators that don't modify left operand */ | /* binary operators that don't modify left operand */ | ||
| - | | + | Vector operator+(const Vector& v) const; |
| - | | + | Vector operator-(const Vector& v) const; |
| - | Vector operator-(const Vector &v) const; | + | Vector operator*(Vector& |
| - | Vector operator*(Vector &v) const; | + | |
| | | ||
| /* binary operators that modify left operand */ | /* binary operators that modify left operand */ | ||
| - | Vector & operator+=(const Vector &v); | + | |
| - | Vector & operator+=(int a); | + | |
| - | Vector & operator-=(const Vector &v); | + | Vector& operator+=(int a); |
| - | Vector & operator-=(int a); | + | Vector& operator-=(const Vector& v); |
| - | Vector & operator*=(const Vector &v); | + | Vector& operator-=(int a); |
| - | Vector & operator*=(int a); | + | Vector& operator*=(const Vector& v); |
| - | Vector & operator/ | + | Vector& operator*=(int a); |
| - | Vector & operator%=(int a); | + | Vector& operator/ |
| - | Vector & operator<< | + | Vector& operator%=(int a); |
| - | Vector & operator>> | + | Vector& operator<< |
| + | Vector& operator>> | ||
| int & | int & | ||
| | | ||
| }; | }; | ||
| - | Vector:: | + | Vector:: |
| size = length; | size = length; | ||
| array = new (nothrow) int[size]; | array = new (nothrow) int[size]; | ||
| Line 72: | Line 72: | ||
| } | } | ||
| - | Vector:: | + | Vector:: |
| size = v.length(); | size = v.length(); | ||
| array = new (nothrow) int[size]; | array = new (nothrow) int[size]; | ||
| Line 98: | Line 98: | ||
| } | } | ||
| - | unsigned | + | int Vector:: |
| return size; | return size; | ||
| } | } | ||
| - | int & | + | int & |
| if(pos> | if(pos> | ||
| cerr << " | cerr << " | ||
| Line 138: | Line 138: | ||
| } | } | ||
| - | Vector & | + | Vector& Vector:: |
| if(array!=NULL) | if(array!=NULL) | ||
| delete [] array; | delete [] array; | ||
| Line 152: | Line 152: | ||
| } | } | ||
| - | Vector Vector:: | + | Vector Vector:: |
| int length; | int length; | ||
| if (size > v.length()) | if (size > v.length()) | ||
| Line 170: | Line 170: | ||
| } | } | ||
| - | Vector Vector:: | + | Vector Vector:: |
| int length; | int length; | ||
| if (size > v.length()) | if (size > v.length()) | ||
| Line 188: | Line 188: | ||
| } | } | ||
| - | Vector & Vector:: | + | Vector& Vector:: |
| if(v.length() > size) { | if(v.length() > size) { | ||
| Vector n(v); | Vector n(v); | ||
| Line 200: | Line 200: | ||
| } | } | ||
| - | Vector & Vector:: | + | Vector& Vector:: |
| for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
| array[i] += a; | array[i] += a; | ||
| Line 206: | Line 206: | ||
| } | } | ||
| - | Vector & Vector:: | + | Vector& Vector:: |
| if(v.length() > size) { | if(v.length() > size) { | ||
| Vector n(v); | Vector n(v); | ||
| Line 218: | Line 218: | ||
| } | } | ||
| - | Vector & Vector:: | + | Vector& Vector:: |
| for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
| array[i] -= a; | array[i] -= a; | ||
| Line 224: | Line 224: | ||
| } | } | ||
| - | Vector & Vector:: | + | Vector& Vector:: |
| if( v.size != size ) | if( v.size != size ) | ||
| return *this; | return *this; | ||
| Line 233: | Line 233: | ||
| } | } | ||
| - | Vector & Vector:: | + | Vector& Vector:: |
| for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
| array[i] *= a; | array[i] *= a; | ||
| Line 239: | Line 239: | ||
| } | } | ||
| - | Vector & Vector:: | + | Vector& Vector:: |
| for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
| array[i] /= a; | array[i] /= a; | ||
| Line 245: | Line 245: | ||
| } | } | ||
| - | Vector & Vector:: | + | Vector& Vector:: |
| for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
| array[i] %= a; | array[i] %= a; | ||
| Line 251: | Line 251: | ||
| } | } | ||
| - | int & | + | Vector& Vector:: |
| - | | + | |
| + | | ||
| + | return *this; | ||
| } | } | ||
| - | Vector & Vector:: | + | Vector& Vector:: |
| - | int *array_new = new (nothrow) int [size+1]; | + | |
| - | if(array_new==NULL) { | + | |
| - | cerr << " | + | |
| - | exit(-1); | + | |
| - | } | + | |
| for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
| - | | + | array[i] |
| - | array_new[size] | + | |
| - | | + | |
| - | delete [] array; | + | |
| - | array = array_new; | + | |
| } | } | ||
| - | Vector | + | int & |
| - | | + | return array[pos]; |
| - | if(pos< | + | |
| - | | + | |
| - | int *array_new = new (nothrow) int [size-1]; | + | |
| - | if(array_new==NULL) { | + | |
| - | cerr << " | + | |
| - | exit(-1); | + | |
| - | } | + | |
| - | for(int i=0; i<size; i++) { | + | |
| - | if(i< | + | |
| - | array_new[i] = array[i]; | + | |
| - | if(i==pos) | + | |
| - | continue; | + | |
| - | if(i> | + | |
| - | array_new[i-1] = array[i]; | + | |
| - | } | + | |
| - | size--; | + | |
| - | delete [] array; | + | |
| - | array = array_new; | + | |
| } | } | ||
| - | |||
| int main() { | int main() { | ||
| Line 325: | Line 300: | ||
| f.print(msg=" | f.print(msg=" | ||
| | | ||
| - | | + | cout << "v[2]: " << |
| - | int k = f[2]; | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| } | } | ||
| </ | </ | ||