User Tools

Site Tools


cpp:operator_overloading

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cpp:operator_overloading [2017/05/04 14:33] gthanoscpp:operator_overloading [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
 ====== Υπερφόρτωση τελεστών ====== ====== Υπερφόρτωση τελεστών ======
  
-Η C++ επιτρέπει την //υπεφόρτωση// των περισσότερων από τους διαθέσιμους τελεστές της γλώσσας. Με τον όρο //υπεφόρτωση// εννοούμε τον ορισμό μιας νέας συμπεριφοράς για τον τελεστή όταν αυτός εφαρμόζεται όχι σε βασικούς τύπους δεδομένων, αλλά σε αναφορικούς τύπους δεδομένων. Για παράδειγμα, στην παρακάτω κλάση //Time// τι θα γίνει εάν προσθέσουμε δύο αντικείμενα της κλάσης αυτής;+Η C++ επιτρέπει την //υπεφόρτωση// των περισσότερων από τους διαθέσιμους τελεστές της γλώσσας. Με τον όρο //υπεφόρτωση// εννοούμε τον ορισμό μιας νέας συμπεριφοράς για τον τελεστή όταν αυτός εφαρμόζεται όχι σε βασικούς τύπους δεδομένων, αλλά σε σύνθετους τύπους δεδομένων που περιγράφονται από κλάσεις. Για παράδειγμα, στην παρακάτω κλάση //Time// τι θα γίνει εάν προσθέσουμε δύο αντικείμενα της κλάσης αυτής;
  
 <code cpp Time.cpp> <code cpp Time.cpp>
Line 79: Line 79:
  
 <WRAP info 80% center round> <WRAP info 80% center round>
-Οι τελεστές μπορούν να κατηγοριοποιηθούν σε δύο βασικές κατηγορίες, τους μοναδιαίους τελεστές και τους δυαδικούς τελεστές. Μοναδιαίοι είναι οι τελεστές που λαμβάνουν μόνο ένα μία παράμετρο στα δεξιά ή τα αριστερά τους. Παραδείγματα μοναδιαίτων τελστών είναι τα εξής: **!a, -a, a++**. Οι παράμετροι των τελεστών στο εξής θα καλούνται τελεστέοι.+Οι τελεστές μπορούν να κατηγοριοποιηθούν σε δύο βασικές κατηγορίες, τους //μοναδιαίους// τελεστές και τους //δυαδικούς// τελεστές. //Μοναδιαίοι// είναι οι τελεστές που λαμβάνουν μόνο ένα μία παράμετρο στα δεξιά ή τα αριστερά τους. Παραδείγματα μοναδιαίων τελεστών είναι τα εξής: **!a, -a, a++**. 
  
-Δυαδικοί τελεστές είναι εκείνοι που έχουν δύο τελεστέους, συνήθως ένα στα αριστερά και ένα στα δεξιά του τελεστή. Παραδείγματα δυαδικών τελεστών είναι τα εξής: **a+=b, a+b**.+Οι παράμετροι των τελεστών στο εξής θα καλούνται τελεστέοι.
  
-Τόσο οι μοναδιαίοι τελεστές όσο και οι δυαδικοί τελεστές είναι δυνατόν να μεταβάλλουν ή να μη μεταβάλλουν το αντικείμενο στο οποίο εφαρμόζονται.+//Δυαδικοί// τελεστές είναι εκείνοι που έχουν δύο τελεστέους, συνήθως ένα στα αριστερά και ένα στα δεξιά του τελεστή. Παραδείγματα δυαδικών τελεστών είναι τα εξής: **a+=b, a+b**. 
 + 
 +Τόσο οι //μοναδιαίοι// τελεστές όσο και οι //δυαδικοί// τελεστές είναι δυνατόν να μεταβάλλουν ή να μη μεταβάλλουν το αντικείμενο στο οποίο εφαρμόζονται.
 </WRAP> </WRAP>
  
 Οι συναρτήσεις υπερφόρτωσης χωρίζονται σε δύο βασικές κατηγορίες **//α)//** μέλη της κλάσης και **//β)//** φιλικές συναρτήσεις. Για κάθε μία από τις παραπάνω δύο κατηγορίες ισχύουν τα εξής: Οι συναρτήσεις υπερφόρτωσης χωρίζονται σε δύο βασικές κατηγορίες **//α)//** μέλη της κλάσης και **//β)//** φιλικές συναρτήσεις. Για κάθε μία από τις παραπάνω δύο κατηγορίες ισχύουν τα εξής:
   * **μέλη της κλάσης:** Για συναρτήσεις υπερφόρτωσης τελεστών που αποτελούν μέλη της κλάσης ισχύουν τα εξής:   * **μέλη της κλάσης:** Για συναρτήσεις υπερφόρτωσης τελεστών που αποτελούν μέλη της κλάσης ισχύουν τα εξής:
-    * Για μοναδιαίους τελεστές οι συναρτήσεις μέλη θεωρούν ο τελεστέος είναι το αντικείμενο που ανήκει η συνάρτηση. Συνήθως οι μοναδιαίοι τελεστές δεν έχουν ορίσματα. Εξαίρεση αποτελούν οι τελεστές αύξησης ή μείωσης κατά ένα (%%++ ή --%%) όταν αυτοί εφαρμόζονται στα δεξιά του αντικειμένου (//postfix increment/decrement operators//), όπου τοποθετούνται λαμβάνουν ως όρισμα έναν ακέραιο. +    * Για μοναδιαίους τελεστές οι συναρτήσεις μέλη θεωρούν ο τελεστέος είναι το αντικείμενο στο οποίο ανήκει η συνάρτηση. Συνήθως οι συναρτήσεις υπερφόρτωσης των μοναδιαίων τελεστών δεν έχουν ορίσματα. Εξαίρεση αποτελούν οι τελεστές αύξησης ή μείωσης κατά ένα (%%++ ή --%%) όταν αυτοί εφαρμόζονται στα δεξιά του αντικειμένου (//postfix increment/decrement operators//), όπου λαμβάνουν ως μοναδικό όρισμα έναν ακέραιο. 
-    * Για δυαδικούς τελεστές οι συναρτήσεις υπερφόρτωσης θεωρούν ότι ο αριστερός τελεστέος είναι το αντικείμενο στο οποίο ανήκει η συνάρτηση και ο δεξιός τελεστέος δίνεται ως παράμετρος.+    * Για δυαδικούς τελεστές οι συναρτήσεις υπερφόρτωσης θεωρούν ότι ο αριστερός τελεστέος είναι το αντικείμενο στο οποίο ανήκει η συνάρτηση και ο δεξιός τελεστέος δίνεται ως η μοναδική παράμετρος.
   * **φιλικές συναρτήσεις της κλάσης:** Για φιλικές συναρτήσεις υπερφόρτωσης ισχύουν τα εξής:   * **φιλικές συναρτήσεις της κλάσης:** Για φιλικές συναρτήσεις υπερφόρτωσης ισχύουν τα εξής:
-    * Για μοναδιαίους τελεστές οι φιλικές συναρτήσεις θεωρούν ότι ο τελεστέος είναι το μοναδικό όρισμα της συνάρτησης. Εξαίρεση αποτελούν οι τελεστές αύξησης ή μείωσης κατά ένα (%%++ ή --%%) όταν αυτοί εφαρμόζονται στα δεξιά του αντικειμένου (//postfix increment/decrement operators//), όπου λαμβάνουν δύο ορίσματα α) το αντικείμενο που εφαρμόζονται (τελεστέος) και β) έναν ακέραιο. +    * Για μοναδιαίους τελεστές οι φιλικές συναρτήσεις θεωρούν ότι ο τελεστέος είναι το μοναδικό όρισμα της συνάρτησης. Εξαίρεση αποτελούν οι τελεστές αύξησης ή μείωσης κατά ένα (%%++ ή --%%) όταν αυτοί εφαρμόζονται στα δεξιά του αντικειμένου (//postfix increment/decrement operators//), όπου λαμβάνουν δύο ορίσματα με την παρακάτω σειρά α) το αντικείμενο στο οποίο εφαρμόζονται (τελεστέος) και β) έναν ακέραιο. 
-    * Για δυαδικούς τελεστές οι φιλικές συναρτήσεις υπερφόρτωσης θεωρούν ότι ο αριστερός τελεστέος είναι το πρώτο όρισμα της συηνάρτησης και ο δεξιός τελεστέος το δεύτερο όρισμα. +    * Για δυαδικούς τελεστές οι φιλικές συναρτήσεις υπερφόρτωσης λαμβάνουν δύο ορίσματα. Θεωρούν ότι ο αριστερός τελεστέος είναι το πρώτο όρισμα της συνάρτησης υπερφόρτωσης και ο δεξιός τελεστέος το δεύτερο όρισμα.  
-  +
  
 Ο παρακάτω πίνακας δίνει τη μορφή της συνάρτησης υπερφόρτωσης για τους τελεστές που είναι διαθέσιμοι προς υπεφόρτωση. Αντικαταστήστε τον χαρακτήρα ''@'' με τον εκάστοτε τελεστή.  Ο παρακάτω πίνακας δίνει τη μορφή της συνάρτησης υπερφόρτωσης για τους τελεστές που είναι διαθέσιμοι προς υπεφόρτωση. Αντικαταστήστε τον χαρακτήρα ''@'' με τον εκάστοτε τελεστή. 
  
-^  Έκφραση  ^  Τελεστής  ^  Υπερφόρτωση ως μέλος της κλάσης  ^  Υπερφόρτωση ως μη-μέλος της κλάσης  ^+^  Έκφραση  ^  Τελεστής  ^  Υπερφόρτωση ως μέλος της κλάσης   Υπερφόρτωση ως φιλική συνάρτηση της κλάσης  ^
 |  @a  | %%+ - * & ! ~ ++ --%%  |  A::operator@()  |  operator@(A)  | |  @a  | %%+ - * & ! ~ ++ --%%  |  A::operator@()  |  operator@(A)  |
 |  a@  | %%++ --%%  |  A::operator@(int)  |  operator@(A,int)  | |  a@  | %%++ --%%  |  A::operator@(int)  |  operator@(A,int)  |
Line 107: Line 108:
  
 Οι τελεστές που δεν υπερφορτώνονται είναι οι εξής: Οι τελεστές που δεν υπερφορτώνονται είναι οι εξής:
-|  ::  |  .*  |  .  |  ?:  |+|  **::**  |  **.* **  |  **.**  |  **?:**  |
  
  
cpp/operator_overloading.1493908392.txt.gz · Last modified: 2017/05/04 13:33 (external edit)