cpp:vector_overloading_binary_operators2
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
cpp:vector_overloading_binary_operators2 [2017/05/05 13:07] – gthanos | cpp:vector_overloading_binary_operators2 [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Υπερφόρτωση δυαδικών τελεστών που | + | ===== Υπερφόρτωση δυαδικών τελεστών |
- | Παρακάτω θα δούμε την υπερφόρτωση τελεστών | + | Σε αυτή την ενότητα, |
- | + | ||
- | ^ Τελεστής | + | ^ Τελεστής |
- | | %%+=%% | // | + | | %%=%% | // |
- | | %%-=%% | // | + | | %%[ ]%% | // |
+ | | %%+=%% | // | ||
| %%+=%% | | %%+=%% | ||
- | | %%-=%% | + | | %%-=%% |
- | | %%*=%% | + | | %%-=%% |
- | | %%/ | + | | %%*=%% |
- | | %%<<=%% | // | + | | %%*=%% |
- | | %%>>=%% | // | + | | %%/ |
+ | | %% %=%% | // | ||
+ | | %%<<=%% | // | ||
+ | | %%>> | ||
+ | <code cpp Vector.hpp> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | using namespace std; | ||
+ | |||
+ | #ifndef _VECTOR_HPP_ | ||
+ | #define _VECTOR_HPP_ | ||
+ | |||
+ | class Vector { | ||
+ | int *array; | ||
+ | int size; | ||
+ | | ||
+ | public: | ||
+ | Vector(int length=0); | ||
+ | Vector(const Vector& v); | ||
+ | Vector(const Vector *v); | ||
+ | ~Vector(); | ||
+ | int length() const; | ||
+ | int & | ||
+ | int find(int a) const; | ||
+ | // if not element not found | ||
+ | | ||
+ | void print() const; | ||
+ | void print(string &msg) const; | ||
+ | | ||
+ | /* binary operators that don't modify left operand */ | ||
+ | Vector operator+(const Vector& v) const; | ||
+ | Vector operator-(const Vector& v) const; | ||
+ | Vector operator*(Vector& | ||
+ | | ||
+ | /* binary operators that modify left operand */ | ||
+ | Vector& operator=(const Vector& v); | ||
+ | Vector& operator+=(const Vector& v); | ||
+ | Vector& operator+=(int a); | ||
+ | Vector& operator-=(const Vector& v); | ||
+ | Vector& operator-=(int a); | ||
+ | Vector& operator*=(const Vector& v); | ||
+ | Vector& operator*=(int a); | ||
+ | Vector& operator/ | ||
+ | Vector& operator%=(int a); | ||
+ | Vector& operator<< | ||
+ | Vector& operator>> | ||
+ | int & | ||
+ | | ||
+ | }; | ||
+ | |||
+ | #endif | ||
+ | </ | ||
<code cpp Vector.cpp> | <code cpp Vector.cpp> | ||
+ | #include " | ||
+ | |||
+ | Vector:: | ||
+ | size = length; | ||
+ | array = new (nothrow) int[size]; | ||
+ | if(array==NULL) { | ||
+ | cerr << " | ||
+ | exit(-1); | ||
+ | } | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] = 0; | ||
+ | } | ||
+ | |||
+ | Vector:: | ||
+ | size = v.length(); | ||
+ | array = new (nothrow) int[size]; | ||
+ | if(array==NULL) { | ||
+ | cerr << " | ||
+ | exit(-1); | ||
+ | } | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] = v.valueAt(i); | ||
+ | } | ||
+ | |||
+ | Vector:: | ||
+ | size = v-> | ||
+ | array = new (nothrow) int[size]; | ||
+ | if(array==NULL) { | ||
+ | cerr << " | ||
+ | exit(-1); | ||
+ | } | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] = v-> | ||
+ | } | ||
+ | |||
+ | Vector:: | ||
+ | delete [] array; | ||
+ | } | ||
+ | |||
+ | int Vector:: | ||
+ | return size; | ||
+ | } | ||
+ | |||
+ | int & | ||
+ | if(pos> | ||
+ | cerr << " | ||
+ | | ||
+ | } | ||
+ | return array[pos]; | ||
+ | } | ||
+ | |||
+ | int Vector:: | ||
+ | for(int i=0; i<size; i++) | ||
+ | if(array[i] == a) | ||
+ | return i; | ||
+ | return -1; | ||
+ | } | ||
+ | |||
+ | void Vector:: | ||
+ | for(int i=0; i<size; i++) { | ||
+ | cout << array[i]; | ||
+ | if(i==size-1) | ||
+ | cout << endl; | ||
+ | else | ||
+ | cout << ", "; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void Vector:: | ||
+ | cout << msg; | ||
+ | for(int i=0; i<size; i++) { | ||
+ | cout << array[i]; | ||
+ | if(i==size-1) | ||
+ | cout << endl; | ||
+ | else | ||
+ | cout << ", "; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | Vector& Vector:: | ||
+ | if(array!=NULL) | ||
+ | delete [] array; | ||
+ | size = v.length(); | ||
+ | array = new (nothrow) int[size]; | ||
+ | if(array==NULL) { | ||
+ | cerr << " | ||
+ | exit(-1); | ||
+ | } | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] = v.valueAt(i); | ||
+ | return *this; | ||
+ | } | ||
+ | |||
+ | Vector Vector:: | ||
+ | int length; | ||
+ | if (size > v.length()) | ||
+ | length = size; | ||
+ | else | ||
+ | length = v.length(); | ||
+ | Vector n(length); | ||
+ | for(int i=0; i< | ||
+ | int sum = 0; | ||
+ | if(i< | ||
+ | sum += array[i]; | ||
+ | if(i< | ||
+ | sum += v.array[i]; | ||
+ | n.array[i] = sum; | ||
+ | } | ||
+ | return n; | ||
+ | } | ||
+ | |||
+ | Vector Vector:: | ||
+ | int length; | ||
+ | if (size > v.length()) | ||
+ | length = size; | ||
+ | else | ||
+ | length = v.length(); | ||
+ | Vector n(length); | ||
+ | for(int i=0; i< | ||
+ | int sum = 0; | ||
+ | if(i< | ||
+ | sum += array[i]; | ||
+ | if(i< | ||
+ | sum -= v.array[i]; | ||
+ | n.array[i] = sum; | ||
+ | } | ||
+ | return n; | ||
+ | } | ||
+ | |||
+ | Vector& Vector:: | ||
+ | if(v.length() > size) { | ||
+ | Vector n(v); | ||
+ | n = n + *this; | ||
+ | *this = n; | ||
+ | } | ||
+ | else { | ||
+ | *this = *this + v; | ||
+ | } | ||
+ | return *this; | ||
+ | } | ||
+ | |||
+ | Vector& Vector:: | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] += a; | ||
+ | return *this; | ||
+ | } | ||
+ | |||
+ | Vector& Vector:: | ||
+ | if(v.length() > size) { | ||
+ | Vector n(v); | ||
+ | n = n - *this; | ||
+ | *this = n; | ||
+ | } | ||
+ | else { | ||
+ | *this = *this - v; | ||
+ | } | ||
+ | return *this; | ||
+ | } | ||
+ | |||
+ | Vector& Vector:: | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] -= a; | ||
+ | return *this; | ||
+ | } | ||
+ | |||
+ | Vector& Vector:: | ||
+ | if( v.size != size ) | ||
+ | return *this; | ||
+ | | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] *= v.array[i]; | ||
+ | return *this; | ||
+ | } | ||
+ | |||
+ | Vector& Vector:: | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] *= a; | ||
+ | return *this; | ||
+ | } | ||
+ | |||
+ | Vector& Vector:: | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] /= a; | ||
+ | return *this; | ||
+ | } | ||
+ | |||
+ | Vector& Vector:: | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] %= a; | ||
+ | return *this; | ||
+ | } | ||
+ | |||
+ | Vector& Vector:: | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] <<= a; | ||
+ | return *this; | ||
+ | } | ||
+ | |||
+ | Vector& Vector:: | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] >>= a; | ||
+ | return *this; | ||
+ | } | ||
+ | |||
+ | int & | ||
+ | return array[pos]; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code cpp VectorUsage.cpp> | ||
+ | #include " | ||
+ | |||
+ | int main() { | ||
+ | Vector v(5); | ||
+ | v.valueAt(0) = 2; v.valueAt(1) = 3; | ||
+ | v.valueAt(2) = 4; v.valueAt(3) = 5; v.valueAt(4) = 6; | ||
+ | | ||
+ | string msg = " | ||
+ | v.print(msg); | ||
+ | | ||
+ | Vector f , g; | ||
+ | f = g = v; | ||
+ | f.print(msg=" | ||
+ | g.print(msg=" | ||
+ | | ||
+ | g = f += v; | ||
+ | g.print(msg=" | ||
+ | | ||
+ | f -= v; | ||
+ | f.print(msg=" | ||
+ | f *= v; | ||
+ | f.print(msg=" | ||
+ | | ||
+ | f = v; | ||
+ | f += 2; | ||
+ | f.print(msg=" | ||
+ | f -= 2; | ||
+ | f.print(msg=" | ||
+ | f *= 2; | ||
+ | f.print(msg=" | ||
+ | f /= 2; | ||
+ | f.print(msg=" | ||
+ | f %= 2; | ||
+ | f.print(msg=" | ||
+ | | ||
+ | cout << " | ||
+ | v[2] = 100; | ||
+ | v.print(msg=" | ||
+ | } | ||
</ | </ | ||
cpp/vector_overloading_binary_operators2.1493989646.txt.gz · Last modified: 2017/05/05 12:07 (external edit)