====== Παράδειγμα υπερφόρτωσης τελεστών ======
Ας υποθέσουμε ότι έχουμε την παρακάτω κλάση //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| Υπερφόρτωση δυαδικών τελεστών μπορούν να υλοποιηθούν μόνο ως μέλη της κλάσης ]]