User Tools

Site Tools


cpp:vector_overloading

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Previous revision
cpp:vector_overloading [2021/05/24 06:35]
cpp:vector_overloading [2021/05/24 07:35]
gthanos
Line 1: Line 1:
 +====== Παράδειγμα υπερφόρτωσης τελεστών ======
 +
 +Ας υποθέσουμε ότι έχουμε την παρακάτω κλάση //Vector// η οποία υλοποιεί ένα μονοδιάστατο πίνακα από ακεραίους.
 +<code cpp Vector.hpp>
 +#include <iostream>
 +#include <cstdlib>
 +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
 +</code>
 +
 +<code cpp Vector.cpp>
 +#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; i<size; i++)
 +    array[i] = 0;
 +}
 +
 +Vector::Vector(const Vector &v) {
 +  size = v.length();
 +  array = new (nothrow) int[size];
 +  if(array==NULL) {
 +    cerr << "Memory allocation failure!" << endl;
 +    exit(-1);
 +  }
 +  for(int i=0; i<size; i++)
 +    array[i] = v.valueAt(i);
 +}
 +
 +Vector::Vector(const Vector *v) {
 +  size = v->length();
 +  array = new (nothrow) int[size];
 +  if(array==NULL) {
 +    cerr << "Memory allocation failure!" << endl;
 +    exit(-1);
 +  }
 +  for(int i=0; i<size; i++)
 +    array[i] = v->valueAt(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<size; i++)
 +    if(array[i] == a)
 +      return i;
 +    return -1;
 +}
 +
 +void Vector::print() const {
 +  for(int i=0; i<size; i++) {
 +    cout << array[i];
 +    if(i==size-1)
 +      cout << endl;
 +    else
 +      cout << ", ";
 +  }
 +}
 +</code>
 +
 +<code cpp VectorUsage.cpp>
 +#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();
 +}
 +</code>
 +
 +
 +Για την παραπάνω κλάση κλάση //Vector// θέλουμε να υπερφορτώσουμε τους τελεστές ανά κατηγορία ως εξής:
 +  * [[cpp:vector_overloading_unary_operators| Υπερφόρτωση μοναδιαίων τελεστών ]]
 +  * [[cpp:vector_overloading_binary_operators| Υπερφόρτωση δυαδικών τελεστών που μπορούν να υλοποιηθούν ως μέλη της κλάσης ή ως φιλικές συναρτήσεις ]]
 +  * [[cpp:vector_overloading_binary_operators2| Υπερφόρτωση δυαδικών τελεστών μπορούν να υλοποιηθούν μόνο ως μέλη της κλάσης ]]
 +
  
cpp/vector_overloading.txt · Last modified: 2021/05/24 06:35 (external edit)