User Tools

Site Tools


cpp:operator_overloading

Differences

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

Link to this comparison view

Next revision
Previous revision
cpp:operator_overloading [2017/04/26 14:00]
gthanos created
cpp:operator_overloading [2021/05/24 06:28]
Line 1: Line 1:
-====== Υπερφόρτωση τελεστών ====== 
  
-Η C++ επιτρέπει την //υπεφόρτωση// των περισσότερων από τους διαθέσιμους τελεστές της γλώσσας. Με τον όρο //υπεφόρτωση// εννοούμε τον ορισμό μιας νέας συμπεριφοράς για τον τελεστή όταν αυτός εφαρμόζεται όχι σε βασικούς τύπους δεδομένων, αλλά σε αναφορικούς τύπους δεδομένων. Για παράδειγμα, στην παρακάτω κλάση //Time// τι θα γίνει εάν προσθέσουμε δύο αντικείμενα της κλάσης αυτής; 
- 
-<code cpp Time.cpp> 
-class Time { 
-  int minutes; 
-  int hours; 
-public: 
-  Time(int hours, int minutes) { 
-    if(hours >= 0) 
-      this->hours = hours; 
-    else  
-      this->hours = 0; 
-    if(minutes >= 0) 
-      this->minutes = minutes; 
-    else 
-      this->minutes = 0; 
-  } 
-  int getMinutes() { return minutes; } 
-  int getHours() { return hours; } 
-}; 
- 
-int main() { 
-  Time t1(10,30), t2(12, 50); 
-  Time t3 = t1 + t2; 
-} 
-</code> 
- 
-Προς το παρόν αυτό που θα συμβεί είναι ότι ο παραπάνω κώδικας δεν μεταγλωττίζεται καθώς δεν ορίζεται κάποια συμπεριφορά για τον τελεστή ''+'' όταν αυτός εφαρμόζεται σε αντικείμενα τύπου //Time//. Αυτό μπορεί να αλλάξει εάν ορίσουμε μία συμπεριφορά για αυτό τον τελεστή επαναφορτώνοντας τον ως εξής. 
- 
-<code cpp Time.cpp> 
- 
-#include <iostream> 
-class Time { 
-  int minutes; 
-  int hours; 
-public: 
-  Time(int hours, int minutes) { 
-    if(hours >= 0) 
-      this->hours = hours; 
-    else  
-      this->hours = 0; 
-    if(minutes >= 0) 
-      this->minutes = minutes; 
-    else 
-      this->minutes = 0; 
-  } 
-  Time operator+(const Time &t) { 
-    Time f(hours, minutes); 
-    f.minutes += t.minutes; 
-    if(f.minutes>=60) 
-      f.minutes -= 60; 
-    f.hours++; 
-    f.hours += t.hours; 
-    if(f.hours > 24) 
-      f.hours -= 24; 
-    return f; 
-  } 
-  int getMinutes() { return minutes; } 
-  int getHours() { return hours; } 
-}; 
- 
-int main() { 
-  Time t1(10,30), t2(12, 50); 
-  Time t3 = t1 + t2; 
-  std::cout << "t3: " << t3.getHours() <<"H, " << t3.getMinutes() << "m\n"; 
-} 
-</code> 
cpp/operator_overloading.txt · Last modified: 2021/05/24 06:28 (external edit)