cpp:vector_overloading_binary_operators
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| cpp:vector_overloading_binary_operators [2017/05/05 12:55] – gthanos | cpp:vector_overloading_binary_operators [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Υπερφόρτωση δυαδικών τελεστών που | + | ===== Υπερφόρτωση δυαδικών τελεστών που |
| - | Παρακάτω | + | Ο παρακάτω |
| ^ Τελεστής | ^ Τελεστής | ||
| - | | %%+%% | // | + | | %%+%% | // |
| - | | %%-%% | // | + | | %%-%% | // |
| - | | %%+%% | // | + | | %%*%% | // |
| + | | %%+%% | // | ||
| | %%+%% | // | | %%+%% | // | ||
| | %%-%% | // | | %%-%% | // | ||
| Line 13: | Line 14: | ||
| | %%/%% | // | | %%/%% | // | ||
| | % | // | | % | // | ||
| - | | %%<< | + | | %%<< |
| - | | %%>> | + | | %%>> |
| + | | %%==%% | ||
| + | | %%!=%% | ||
| <WRAP center round info 80%> | <WRAP center round info 80%> | ||
| - | Όταν έχετε μία φιλική μέθοδο και ένα μέλος της κλάσης | + | Μία φιλική μέθοδος και ένα μέλος της κλάσης |
| </ | </ | ||
| + | <code cpp Vector.hpp> | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | using namespace std; | ||
| + | #ifndef _VECTOR_HPP_ | ||
| + | #define _VECTOR_HPP_ | ||
| - | <code cpp Vector.cpp> | + | 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); // assignment operator | ||
| + | Vector operator+(const Vector& v) const; | ||
| + | //friend Vector operator+(const Vector& v1, const Vector& v2); // same as above | ||
| + | Vector operator-(const Vector& v) const; | ||
| + | Vector operator*(const Vector& v) const; | ||
| + | friend Vector operator+(const Vector& v, int a); // Returns a new vector. Each element of vector equals the sum of v[i] + a | ||
| + | friend Vector operator+(int a, const Vector& v); // Returns a new vector. Each element of vector equals the sum of v[i] + a | ||
| + | Vector operator-(int a) const; | ||
| + | Vector operator*(int a) const; | ||
| + | friend Vector operator*(int a, const Vector& v); // Returns a new vector. Each element of vector equals the product: | ||
| + | Vector operator/ | ||
| + | Vector operator%(int a) const; | ||
| + | |||
| + | bool operator==(const Vector& v) const; | ||
| + | bool operator!=(const Vector& v) const; | ||
| + | // of right operand. | ||
| + | |||
| + | Vector operator | ||
| + | // | ||
| + | Vector operator >> (int a) const; | ||
| + | //friend Vector operator>>(const Vector& v, int a);// Same as above | ||
| + | }; | ||
| + | |||
| + | #endif | ||
| </ | </ | ||
| - | Από τα παραπάνω παρατηρούμε τα εξής: | + | <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; | ||
| + | print(); | ||
| + | } | ||
| + | |||
| + | 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 operator+(const Vector& v1, const Vector v2) { | ||
| + | int length; | ||
| + | if (v1.size > v2.size) | ||
| + | length = v1.length(); | ||
| + | else | ||
| + | length = v2.length(); | ||
| + | Vector n(length); | ||
| + | for(int i=0; i< | ||
| + | int sum = 0; | ||
| + | if(i< | ||
| + | sum += v1.array[i]; | ||
| + | if(i< | ||
| + | sum += v2.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:: | ||
| + | int length; | ||
| + | if (size < v.size) | ||
| + | length = size; | ||
| + | else | ||
| + | length = v.size; | ||
| + | Vector n(length); | ||
| + | for(int i=0; i< | ||
| + | n.array[i] = array[i] * v.array[i]; | ||
| + | return n; | ||
| + | } | ||
| + | |||
| + | Vector operator+(const Vector& v, int a) { | ||
| + | Vector n(v.size); | ||
| + | for(int i=0; i< | ||
| + | n.array[i] = v.array[i] + a; | ||
| + | return n; | ||
| + | } | ||
| + | |||
| + | Vector operator+(int a, const Vector& v) { | ||
| + | Vector n(v); | ||
| + | for(int i=0; i< | ||
| + | n.array[i] += a; | ||
| + | } | ||
| + | return n; | ||
| + | } | ||
| + | |||
| + | Vector Vector:: | ||
| + | Vector n(size); | ||
| + | for(int i=0; i<size; i++) | ||
| + | n.array[i] = array[i] - a; | ||
| + | return n; | ||
| + | } | ||
| + | |||
| + | Vector Vector:: | ||
| + | Vector n(size); | ||
| + | for(int i=0; i<size; i++) | ||
| + | n.array[i] = array[i] * a; | ||
| + | return n; | ||
| + | } | ||
| + | |||
| + | Vector operator*(int a, const Vector& v) { | ||
| + | Vector n(v); | ||
| + | for(int i=0; i< | ||
| + | n.array[i] *= a; | ||
| + | } | ||
| + | return n; | ||
| + | } | ||
| + | |||
| + | Vector Vector:: | ||
| + | Vector n(size); | ||
| + | for(int i=0; i<size; i++) | ||
| + | n.array[i] = array[i] / a; | ||
| + | return n; | ||
| + | } | ||
| + | |||
| + | Vector Vector:: | ||
| + | Vector n(size); | ||
| + | for(int i=0; i<size; i++) | ||
| + | n.array[i] = array[i] % a; | ||
| + | return n; | ||
| + | } | ||
| + | |||
| + | bool Vector:: | ||
| + | if( size != v.size ) | ||
| + | return false; | ||
| + | for(int i=0; i<size; i++) | ||
| + | if( array[i] != v.array[i] ) | ||
| + | return false; | ||
| + | return true; | ||
| + | } | ||
| + | |||
| + | bool Vector:: | ||
| + | return !(*this == v); | ||
| + | } | ||
| + | |||
| + | /* | ||
| + | Vector operator<< | ||
| + | Vector n(v); | ||
| + | for(int i=0; i< | ||
| + | n.array[i] <<= a; | ||
| + | return n; | ||
| + | }*/ | ||
| + | |||
| + | Vector Vector:: | ||
| + | Vector n(*this); | ||
| + | for(int i=0; i< | ||
| + | n.array[i] <<= a; | ||
| + | return n; | ||
| + | } | ||
| + | |||
| + | /*Vector operator>> | ||
| + | Vector n(v); | ||
| + | for(int i=0; i< | ||
| + | n.array[i] >>= a; | ||
| + | return n; | ||
| + | }*/ | ||
| + | |||
| + | Vector Vector:: | ||
| + | Vector n(*this); | ||
| + | for(int i=0; i< | ||
| + | n.array[i] >>= a; | ||
| + | return n; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <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 = v; | ||
| + | v.print(msg=" | ||
| + | if( f == v ) | ||
| + | cout << "f == v " << endl; | ||
| + | else | ||
| + | cout << "f != v " << endl; | ||
| + | | ||
| + | | ||
| + | Vector k; | ||
| + | k = f + v; | ||
| + | k.print(msg=" | ||
| + | k = f - v; | ||
| + | k.print(msg=" | ||
| + | k = f * v; | ||
| + | k.print(msg=" | ||
| + | k = f + 2; | ||
| + | k.print(msg=" | ||
| + | k = 2 + f; | ||
| + | k.print(msg=" | ||
| + | k = f - 2; | ||
| + | k.print(msg=" | ||
| + | k = f * 2; | ||
| + | k.print(msg=" | ||
| + | k = f / 2; | ||
| + | k.print(msg=" | ||
| + | k = f % 2; | ||
| + | k.print(msg=" | ||
| + | f = f << 2; | ||
| + | f.print(msg=" | ||
| + | f = f >> 2; | ||
| + | f.print(msg=" | ||
| + | if( f == v ) | ||
| + | cout << "f == v " << endl; | ||
| + | else | ||
| + | cout << "f != v " << endl; | ||
| + | } | ||
| + | </ | ||
cpp/vector_overloading_binary_operators.1493988913.txt.gz · Last modified: 2017/05/05 11:55 (external edit)
