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 [2019/05/16 07:29]
gthanos
cpp:vector_overloading [2021/05/24 06:35]
Line 1: Line 1:
-====== Παράδειγμα υπερφόρτωσης τελεστών ====== 
- 
-Ας υποθέσουμε ότι έχουμε την παρακάτω κλάση //Vector// η οποία υλοποιεί ένα μονοδιάστατο πίνακα από ακεραίους. 
-<code cpp Vector.cpp> 
-#include <iostream> 
-#include <cstdlib> 
-using namespace std; 
- 
-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 
-}; 
- 
-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 << ", "; 
-  } 
-} 
- 
-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;  
-} 
-</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)