cpp:vector_overloading_unary_operators
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
cpp:vector_overloading_unary_operators [2017/05/05 08:44] – gthanos | cpp:vector_overloading_unary_operators [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Υπερφόρτωση μοναδιαίων τελεστών (unary operators) ====== | ====== Υπερφόρτωση μοναδιαίων τελεστών (unary operators) ====== | ||
- | ^ Τελεστής | + | Ο παρακάτω πίνακας περιγράφει την υπερφόρτωση των τελεστών στο παράδειγμα της κλάσης //Vector// που ακολουθεί. |
- | | %%+%% | Πριν | + | |
- | | %%-%% | Πριν | + | ^ Τελεστής |
- | | %%++%% | + | | %%+%% | Πριν |
- | | %%--%% | + | | %%-%% | Πριν |
- | | %%++%% | + | | %%++%% |
- | | %%--%% | + | | %%--%% |
- | | %%*%% | Πριν | + | | %%++%% |
- | | %%!%% | Πριν | + | | %%--%% |
- | | %%~%% | Πριν | + | | %%*%% | Πριν |
+ | | %%!%% | Πριν | ||
+ | | %%~%% | Πριν | ||
<color red> | <color red> | ||
Line 30: | Line 32: | ||
</ | </ | ||
</ | </ | ||
+ | |||
<WRAP center round tip 80%> | <WRAP center round tip 80%> | ||
- | Στον | + | Επίσης, |
- | * Οι συναρτήσεις που δεν μεταβάλλουν το αντικείμενο στο οποίο εφαρμόζονται δηλώνονται ως **// | + | <code cpp> |
- | * Σε όλες τις περιπτώσεις | + | Vector operator~() const; |
- | * η υπερφόρτωση του τελεστή **!** (// | + | </ |
+ | επιστρέφει ένα νέο αντικείμενο του οποίου | ||
</ | </ | ||
- | <code cpp Vector.cpp> | + | <code cpp Vector.hpp> |
#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: | ||
Line 53: | Line 60: | ||
Vector(const Vector *v); | Vector(const Vector *v); | ||
~Vector(); | ~Vector(); | ||
- | unsigned int length() const; | + | unsigned int length() const; |
- | int & | + | int& valueAt(unsigned int pos); // return a reference to element at position pos |
- | int find(int a) const; | + | |
- | // if not element not found | + | |
| | ||
- | | + | |
- | void print(string &msg) const; | + | |
- | void operator=(const Vector &v); | + | // Otherwise, return -1 |
| | ||
- | | + | |
- | | + | |
- | Vector operator++(); // prefix increment | + | Vector& operator=(const Vector &v); |
- | Vector operator--(); | + | |
- | int operator*() const; | + | |
- | Vector operator~() const; | + | |
- | friend Vector operator!(const Vector & | + | |
| | ||
- | Vector operator++(int ); | + | |
- | Vector operator--(int ); | + | friend int operator*(const Vector& |
+ | |||
+ | Vector operator-() const; | ||
+ | // values of the original vector. | ||
+ | Vector& operator++(); | ||
+ | friend Vector& operator--(Vector& | ||
+ | | ||
+ | | ||
+ | |||
+ | Vector operator~() const; | ||
+ | friend Vector operator!(const Vector & | ||
+ | // elements in inverted sequence. | ||
}; | }; | ||
+ | |||
+ | #endif | ||
+ | </ | ||
+ | |||
+ | <code cpp Vector.cpp> | ||
+ | #include " | ||
Vector:: | Vector:: | ||
Line 93: | Line 111: | ||
} | } | ||
for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
- | array[i] = v.valueAt(i); | + | array[i] = v.array[i]; |
} | } | ||
Line 104: | Line 122: | ||
} | } | ||
for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
- | array[i] = v->valueAt(i); | + | array[i] = v->array[i]; |
} | } | ||
Line 115: | Line 133: | ||
} | } | ||
- | int & | + | int& Vector:: |
if(pos> | if(pos> | ||
- | cerr << " | + | cerr << " |
| | ||
} | } | ||
Line 124: | Line 142: | ||
int Vector:: | int Vector:: | ||
- | for(int i=0; i<size; i++) | + | for(int i=0; i<size; i++) { |
if(array[i] == a) | if(array[i] == a) | ||
return i; | return i; | ||
- | | + | } |
+ | | ||
} | } | ||
Line 142: | Line 161: | ||
void Vector:: | void Vector:: | ||
cout << msg; | cout << msg; | ||
- | | + | |
- | cout << array[i]; | + | |
- | if(i==size-1) | + | |
- | cout << endl; | + | |
- | else | + | |
- | cout << ", "; | + | |
- | } | + | |
} | } | ||
- | void Vector:: | + | Vector &Vector:: |
if(array!=NULL) | if(array!=NULL) | ||
delete [] array; | delete [] array; | ||
Line 161: | Line 174: | ||
} | } | ||
for(int i=0; i<size; i++) | for(int i=0; i<size; i++) | ||
- | array[i] = v.valueAt(i); | + | array[i] = v.array[i]; |
+ | return *this; | ||
} | } | ||
Line 181: | Line 195: | ||
//prefix increment | //prefix increment | ||
- | Vector Vector:: | + | Vector& Vector:: |
for(int i=0; i<size; i++) { | for(int i=0; i<size; i++) { | ||
array[i]++; | array[i]++; | ||
} | } | ||
- | | + | return |
- | | + | |
} | } | ||
+ | |||
//prefix decrement | //prefix decrement | ||
- | Vector | + | Vector& operator--(Vector& v) { |
- | for(int i=0; i<size; i++) { | + | for(int i=0; i<v.size; i++) { |
- | array[i]--; | + | |
} | } | ||
- | Vector v(this); | ||
return v; | return v; | ||
} | } | ||
- | int Vector::operator*() const{ | + | int operator*(const |
int product = 1; | int product = 1; | ||
- | for(int i=0; i<size; i++) | + | for(int i=0; i<v.size; i++) |
- | product *= array[i]; | + | product *= v.array[i]; |
return product; | return product; | ||
} | } | ||
Line 228: | Line 241: | ||
//postfix decrement | //postfix decrement | ||
- | Vector | + | Vector operator--(Vector& v, int a) { |
- | Vector | + | Vector |
- | for(int i=0; i<size; i++) { | + | for(int i=0; i<v.size; i++) { |
- | array[i]--; | + | |
} | } | ||
- | return | + | return |
} | } | ||
+ | </ | ||
+ | |||
+ | <code cpp VectorUsage.cpp> | ||
+ | #include " | ||
int main() { | int main() { | ||
Line 244: | Line 261: | ||
string msg = " | string msg = " | ||
| | ||
- | v.print(msg); | + | v.print(msg); |
- | int sum = +v; | + | cout << "+v: " << |
- | cout << "Sum of elements: " << | + | |
| | ||
Vector f = -v; | Vector f = -v; | ||
- | f.print(msg=" | + | f.print(msg=" |
- | | + | |
- | cout << "Product of elements: " << | + | cout << "*v: " << |
| | ||
f = !v; | f = !v; | ||
- | f.print(msg = "Inverted sequence: "); | + | f.print(msg = "f = !v: "); cout << endl; |
| | ||
+ | cout << "~2: "<< | ||
f = ~v; | f = ~v; | ||
- | f.print(msg = "Binary inverted: "); | + | f.print(msg = "f = ~v: "); cout << endl; |
| | ||
- | msg = "-------------\nPrefix increment"; | + | |
- | | + | f.print(msg = "f = ++v: "); |
- | f = ++v; | + | |
- | | + | f = --v; |
- | | + | |
+ | | ||
+ | cout << endl; | ||
| | ||
- | msg = "-------------\nPostfix decrement"; | + | |
- | | + | f.print(msg = "f = v++: "); |
+ | | ||
f = v--; | f = v--; | ||
- | | + | |
- | | + | |
} | } | ||
</ | </ |
cpp/vector_overloading_unary_operators.1493973875.txt.gz · Last modified: 2017/05/05 07:44 (external edit)