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 14:49] – 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> | |
- | <code cpp Vector.cpp> | + | |
#include < | #include < | ||
#include < | #include < | ||
#include < | #include < | ||
using namespace std; | using namespace std; | ||
+ | |||
+ | #ifndef _VECTOR_HPP_ | ||
+ | #define _VECTOR_HPP_ | ||
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 37: | Line 42: | ||
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& |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
+ | | ||
int & | int & | ||
| | ||
}; | }; | ||
- | Vector:: | + | #endif |
+ | </ | ||
+ | |||
+ | <code cpp Vector.cpp> | ||
+ | #include " | ||
+ | |||
+ | Vector:: | ||
size = length; | size = length; | ||
array = new (nothrow) int[size]; | array = new (nothrow) int[size]; | ||
Line 70: | Line 81: | ||
} | } | ||
- | Vector:: | + | Vector:: |
size = v.length(); | size = v.length(); | ||
array = new (nothrow) int[size]; | array = new (nothrow) int[size]; | ||
Line 96: | Line 107: | ||
} | } | ||
- | unsigned | + | int Vector:: |
return size; | return size; | ||
} | } | ||
- | int & | + | int & |
if(pos> | if(pos> | ||
cerr << " | cerr << " | ||
Line 136: | Line 147: | ||
} | } | ||
- | void Vector:: | + | Vector& |
if(array!=NULL) | if(array!=NULL) | ||
delete [] array; | delete [] array; | ||
Line 146: | Line 157: | ||
} | } | ||
for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
- | array[i] = v.valueAt(i); | + | array[i] = v.valueAt(i); |
+ | return *this; | ||
} | } | ||
- | Vector Vector:: | + | Vector Vector:: |
int length; | int length; | ||
if (size > v.length()) | if (size > v.length()) | ||
Line 167: | Line 179: | ||
} | } | ||
- | Vector Vector:: | + | Vector Vector:: |
int length; | int length; | ||
if (size > v.length()) | if (size > v.length()) | ||
Line 185: | Line 197: | ||
} | } | ||
- | void Vector:: | + | Vector& |
if(v.length() > size) { | if(v.length() > size) { | ||
Vector n(v); | Vector n(v); | ||
Line 194: | Line 206: | ||
*this = *this + v; | *this = *this + v; | ||
} | } | ||
+ | return *this; | ||
} | } | ||
- | void Vector:: | + | Vector& |
for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
array[i] += a; | array[i] += a; | ||
+ | return *this; | ||
} | } | ||
- | void Vector:: | + | Vector& |
if(v.length() > size) { | if(v.length() > size) { | ||
Vector n(v); | Vector n(v); | ||
Line 210: | Line 224: | ||
*this = *this - v; | *this = *this - v; | ||
} | } | ||
+ | return *this; | ||
} | } | ||
- | void Vector:: | + | Vector& |
for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
array[i] -= a; | array[i] -= a; | ||
+ | return *this; | ||
} | } | ||
- | void Vector:: | + | Vector& |
if( v.size != size ) | if( v.size != size ) | ||
- | return; | + | return |
| | ||
for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
array[i] *= v.array[i]; | array[i] *= v.array[i]; | ||
+ | return *this; | ||
} | } | ||
- | void Vector:: | + | Vector& |
for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
array[i] *= a; | array[i] *= a; | ||
+ | return *this; | ||
} | } | ||
- | void Vector:: | + | Vector& |
for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
array[i] /= a; | array[i] /= a; | ||
+ | return *this; | ||
} | } | ||
- | void Vector:: | + | Vector& |
for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
array[i] %= a; | array[i] %= a; | ||
+ | return *this; | ||
} | } | ||
- | int & | + | Vector& Vector:: |
- | | + | |
+ | | ||
+ | return *this; | ||
} | } | ||
- | void 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; | + | |
} | } | ||
- | void Vector:: | + | int &Vector:: |
- | | + | 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; | + | |
} | } | ||
+ | </ | ||
+ | <code cpp VectorUsage.cpp> | ||
+ | #include " | ||
int main() { | int main() { | ||
Line 289: | Line 288: | ||
v.print(msg); | v.print(msg); | ||
| | ||
- | Vector f = v; | + | Vector f , g; |
- | | + | f = g = v; |
+ | | ||
+ | g.print(msg=" | ||
+ | |||
+ | g = f += v; | ||
+ | g.print(msg=" | ||
| | ||
- | f += v; | ||
- | f.print(msg=" | ||
f -= v; | f -= v; | ||
f.print(msg=" | f.print(msg=" | ||
Line 311: | Line 313: | ||
f.print(msg=" | f.print(msg=" | ||
| | ||
- | | + | cout << "v[2]: " << |
- | int k = f[2]; | + | |
- | | + | |
- | | + | |
- | | + | |
} | } | ||
</ | </ | ||
cpp/vector_overloading_binary_operators2.1493995780.txt.gz · Last modified: 2017/05/05 13:49 (external edit)