====== Παράδειγμα υπερφόρτωσης τελεστών ====== Ας υποθέσουμε ότι έχουμε την παρακάτω κλάση //Vector// η οποία υλοποιεί ένα μονοδιάστατο πίνακα από ακεραίους. #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;// return Vector's length. int &valueAt(int pos) const; // return a reference to element at position pos int find(int a) const; // check if a exists in Vector. Return it position >0 or -1 // if not element not found void print() const; // print vector values to standard output }; #endif #include "Vector.hpp" Vector::Vector(int length) { size = length; array = new (nothrow) int[size]; if(array==NULL) { cerr << "Memory allocation failure!" << endl; exit(-1); } for(int i=0; ilength(); array = new (nothrow) int[size]; if(array==NULL) { cerr << "Memory allocation failure!" << endl; exit(-1); } for(int i=0; ivalueAt(i); } Vector::~Vector() { delete [] array; } int Vector::length() const { return size; } int &Vector::valueAt(int pos) const { if(pos>=length()) { cerr << "Invalid access position!\n"; return array[size-1]; } return array[pos]; } int Vector::find(int a) const { for(int i=0; i #include "Vector.hpp" 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; cout << "value 5 at position: " << v.find(5) << endl; cout << "value 10 at position: " << v.find(10) << endl; v.print(); } Για την παραπάνω κλάση κλάση //Vector// θέλουμε να υπερφορτώσουμε τους τελεστές ανά κατηγορία ως εξής: * [[cpp:vector_overloading_unary_operators| Υπερφόρτωση μοναδιαίων τελεστών ]] * [[cpp:vector_overloading_binary_operators| Υπερφόρτωση δυαδικών τελεστών που μπορούν να υλοποιηθούν ως μέλη της κλάσης ή ως φιλικές συναρτήσεις ]] * [[cpp:vector_overloading_binary_operators2| Υπερφόρτωση δυαδικών τελεστών μπορούν να υλοποιηθούν μόνο ως μέλη της κλάσης ]]