User Tools

Site Tools


cpp:vector_overloading

This is an old revision of the document!


Παράδειγμα υπερφόρτωσης τελεστών

Ας υποθέσουμε ότι έχουμε την παρακάτω κλάση Vector η οποία υλοποιεί ένα μονοδιάστατο πίνακα από ακεραίους.

Vector.cpp
#include <iostream>
#include <cstdlib>
using namespace std;
 
class Vector {
  int *array;
  unsigned int size;
 
public:
  Vector(unsigned int length=0);
  Vector(const Vector &v);
  Vector(const Vector *v);
  ~Vector();
  unsigned int length() const;// return Vector's length.
  int &valueAt(unsigned 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
};
 
Vector::Vector(unsigned 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;
}
 
unsigned int Vector::length() const { 
  return size; 
}
 
int &Vector::valueAt(unsigned 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 << ", ";
  }
}
 
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; 
}

Για την παραπάνω κλάση κλάση Vector θέλουμε να υπερφορτώσουμε τους τελεστές ανά κατηγορία ως εξής:

cpp/vector_overloading.1494565303.txt.gz · Last modified: 2017/05/12 04:01 (external edit)