cpp:operator_overloading
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
cpp:operator_overloading [2017/05/04 12:20] – gthanos | cpp:operator_overloading [2017/05/04 14:34] – gthanos | ||
---|---|---|---|
Line 76: | Line 76: | ||
</ | </ | ||
- | Οι συναρτήσεις υπερφόρτωσης τελεστών είναι κανονικές συναρτήσεις που μπορεί να έχουν οποιαδήποτε συμπεριφορά. Για παράδειγμα, | + | Οι συναρτήσεις υπερφόρτωσης τελεστών είναι κανονικές συναρτήσεις που μπορεί να έχουν οποιαδήποτε συμπεριφορά. Για παράδειγμα, |
- | Η παράμετρος που λαμβάνει | + | <WRAP info 80% center round> |
+ | Οι τελεστές μπορούν να κατηγοριοποιηθούν σε δύο βασικές κατηγορίες, τους //μοναδιαίους// τελεστές και τους //δυαδικούς// | ||
- | Επίσης, μία συνάρτηση υπερφόρτωσης | + | Οι παράμετροι των τελεστών στο εξής θα καλούνται τελεστέοι. |
+ | |||
+ | // | ||
+ | |||
+ | Τόσο οι // | ||
+ | </ | ||
+ | |||
+ | Οι συναρτήσεις | ||
+ | * **μέλη της κλάσης: | ||
+ | * Για μοναδιαίους τελεστές οι συναρτήσεις μέλη θεωρούν ο τελεστέος είναι το αντικείμενο που ανήκει η συνάρτηση. Συνήθως οι μοναδιαίοι τελεστές δεν έχουν ορίσματα. Εξαίρεση αποτελούν οι τελεστές αύξησης | ||
+ | * Για δυαδικούς τελεστές οι συναρτήσεις υπερφόρτωσης θεωρούν ότι ο αριστερός τελεστέος είναι το αντικείμενο στο οποίο ανήκει | ||
+ | * **φιλικές συναρτήσεις | ||
+ | * Για | ||
+ | * Για δυαδικούς τελεστές οι φιλικές συναρτήσεις υπερφόρτωσης θεωρούν ότι ο αριστερός τελεστέος είναι το πρώτο όρισμα της συηνάρτησης και ο δεξιός τελεστέος το δεύτερο όρισμα. | ||
+ | | ||
Ο παρακάτω πίνακας δίνει τη μορφή της συνάρτησης υπερφόρτωσης για τους τελεστές που είναι διαθέσιμοι προς υπεφόρτωση. Αντικαταστήστε τον χαρακτήρα '' | Ο παρακάτω πίνακας δίνει τη μορφή της συνάρτησης υπερφόρτωσης για τους τελεστές που είναι διαθέσιμοι προς υπεφόρτωση. Αντικαταστήστε τον χαρακτήρα '' | ||
^ Έκφραση | ^ Έκφραση | ||
- | | @a | + - * & ! ~ ++ -- | A:: | + | | @a | %%+ - * & ! ~ ++ --%% |
- | | a@ | ++ -- | A:: | + | | a@ | %%++ --%% |
- | | a@b | %%+ - * / % ^ & | < > == != <= >= << >> && || ,%% | A:: | + | | a@b | %%+ - * / % ^ | < > == != <= >= << >> && || ,%% | A:: |
| a@b | %%= += -= *= /= %= ^= &= |= <<= >>= []%% | A:: | | a@b | %%= += -= *= /= %= ^= &= |= <<= >>= []%% | A:: | ||
- | | a(b, | + | | a(b, |
| %%a -> b%% | %%-> | | %%a -> b%% | %%-> | ||
| (TYPE) a | TYPE | A::operator TYPE() | | (TYPE) a | TYPE | A::operator TYPE() | ||
Line 96: | Line 111: | ||
| :: | .* | . | ?: | | | :: | .* | . | ?: | | ||
- | ===== Παράδειγμα Υπερφόρτωσης Τελεστών ===== | ||
- | |||
- | Ας υποθέσουμε ότι έχουμε την παρακάτω κλάση //Vector// η οποία υλοποιεί ένα μονοδιάστατο πίνακα από ακεραίους. | ||
- | <code cpp Vector.cpp> | ||
- | #include < | ||
- | #include < | ||
- | 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; | ||
- | int & | ||
- | int find(int a); | ||
- | }; | ||
- | |||
- | 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.valueAt(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; | ||
- | } | ||
- | |||
- | int & | ||
- | if(pos> | ||
- | cerr << " | ||
- | | ||
- | } | ||
- | return array[pos]; | ||
- | } | ||
- | |||
- | int Vector:: | ||
- | for(int i=0; i<size; i++) | ||
- | if(array[i] == a) | ||
- | return i; | ||
- | return -1; | ||
- | } | ||
- | |||
- | 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/operator_overloading.txt · Last modified: 2021/05/24 06:28 (external edit)