cpp:operator_overloading
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revisionNext revisionBoth sides next revision | ||
cpp:operator_overloading [2017/04/26 14:00] – created gthanos | cpp:operator_overloading [2017/05/04 11:43] – [Παράδειγμα Υπερφόρτωσης Τελεστών] gthanos | ||
---|---|---|---|
Line 68: | Line 68: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | <WRAP center round info 80%> | ||
+ | Η λειτουργία υπεφόρτωσης ενός τελεστή μπορεί να κληθεί είτε χρησιμοποιώντας τον τελεστή, | ||
+ | <code cpp> | ||
+ | Time t3 = t1.operator+(t2); | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Οι συναρτήσεις υπερφόρτωσης τελεστών είναι κανονικές συναρτήσεις που μπορεί να έχουν οποιαδήποτε συμπεριφορά. Για παράδειγμα, | ||
+ | |||
+ | Η παράμετρος που λαμβάνει μία συνάρτηση υπερφόρτωσης είναι συνήθως ο τελεστέος που βρίσκεται στα δεξιά του τελεστή. Το παραπάνω είναι χαρακτηριστικό για τελεστές που έχουν τελεστέους τόσο στα αριστερά όσο και στα δεξιά τους (//binary operators// | ||
+ | |||
+ | Επίσης, | ||
+ | |||
+ | Ο παρακάτω πίνακας δίνει τη μορφή της συνάρτησης υπερφόρτωσης για τους τελεστές που είναι διαθέσιμοι προς υπεφόρτωση. Αντικαταστήστε τον χαρακτήρα '' | ||
+ | |||
+ | ^ Έκφραση | ||
+ | | @a | + - * & ! ~ ++ -- | A:: | ||
+ | | a@ | ++ -- | A:: | ||
+ | | a@b | %%+ - * / % ^ & | < > == != <= >= << >> && || ,%% | A:: | ||
+ | | a@b | %%= += -= *= /= %= ^= &= |= <<= >>= []%% | A:: | ||
+ | | a(b, | ||
+ | | %%a -> b%% | %%-> | ||
+ | | (TYPE) a | TYPE | A::operator TYPE() | ||
+ | |||
+ | Οι τελεστές που δεν υπερφορτώνονται είναι οι εξής: | ||
+ | | :: | .* | . | ?: | | ||
+ | |||
+ | ===== Παράδειγμα Υπερφόρτωσης Τελεστών ===== | ||
+ | |||
+ | Ας υποθέσουμε ότι έχουμε την παρακάτω κλάση //Vector// η οποία υλοποιεί ένα μονοδιάστατο πίνακα από ακεραίους. | ||
+ | <code cpp Vector.cpp> | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | class Vector { | ||
+ | int *array; | ||
+ | unsigned int size; | ||
+ | | ||
+ | public: | ||
+ | Vector(unsigned int length=0); | ||
+ | Vector(const Vector &v); | ||
+ | Vector(const Vector *v); | ||
+ | ~Vector(); | ||
+ | } | ||
+ | |||
+ | Vector:: | ||
+ | size = length; | ||
+ | array = new (nothrow) int[size]; | ||
+ | if(array==NULL) { | ||
+ | cerr << " | ||
+ | exit(-1); | ||
+ | } | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] = 0; | ||
+ | } | ||
+ | |||
+ | Vector:: | ||
+ | size = v.length(); | ||
+ | array = new (nothrow) int[size]; | ||
+ | if(array==NULL) { | ||
+ | cerr << " | ||
+ | exit(-1); | ||
+ | } | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] = v.getValue(i); | ||
+ | } | ||
+ | |||
+ | Vector:: | ||
+ | size = v-> | ||
+ | array = new (nothrow) int[size]; | ||
+ | if(array==NULL) { | ||
+ | cerr << " | ||
+ | exit(-1); | ||
+ | } | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] = v-> | ||
+ | } | ||
+ | |||
+ | Vector:: | ||
+ | delete [] array; | ||
+ | } | ||
+ | |||
+ | unsigned int Vector:: | ||
+ | return size; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Για την κλάση //Vector//. | ||
+ |
cpp/operator_overloading.txt · Last modified: 2021/05/24 06:28 (external edit)