User Tools

Site Tools


cpp:const_member_functions

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
Last revisionBoth sides next revision
cpp:const_member_functions [2017/05/15 07:33] gthanoscpp:const_member_functions [2021/05/07 08:50] – [Υπερφόρτωση const και non-const συναρτήσεων] gthanos
Line 1: Line 1:
 ====== Const μέθοδοι της κλάσης ====== ====== Const μέθοδοι της κλάσης ======
  
-Όταν δηλώνεται ένα αντικείμενο ως //const// (όπως παρακάτω), τότε οι μεταβλητές του αντικειμένου μπορούν μόνο να διαβαστούν αλλά όχι να μεταβληθούν, πρόκειται δηλαδή για ένα αμετάβλητο αντικείμενο. Παρατηρήστε βέβαια, ότι ο κατασκευαστής του αντικειμένου αρχικοποιεί κανονικά το αντικείμενο και μεταβάλλει τις μεταβλητές του.+Όταν δηλώνεται ένα αντικείμενο ως //const// (όπως παρακάτω), τότε τα πεδία του αντικειμένου μπορούν μόνο να διαβαστούν αλλά όχι να μεταβληθούν, πρόκειται δηλαδή για ένα αμετάβλητο αντικείμενο. Εξαίρεση αποτελεί ο κατασκευαστής του αντικειμένου, ο οποίος αρχικοποιεί κανονικά το αντικείμενο και μεταβάλλει τις μεταβλητές του.
  
 <code cpp Rectangle.cpp> <code cpp Rectangle.cpp>
Line 41: Line 41:
 </code> </code>
  
-Σε αυτή την περίπτωση λαμβάνετε το παρακάτω μήνυμα λάθους:+Σε αυτή την περίπτωση λαμβάνετε το παρακάτω μήνυμα λάθους από το μεγαγλωττιστή:
 <code> <code>
 Rectangle5.cpp: In function ‘int main()’:                                                                                                                                                                           Rectangle5.cpp: In function ‘int main()’:                                                                                                                                                                          
Line 80: Line 80:
 } }
 </code> </code>
 +
 +===== Υπερφόρτωση const και non-const συναρτήσεων =====
 +
 +Στον παραπάνω κώδικα μπορείτε να έχετε δύο εκδόσεις για τις συναρτήσεις getWidth() και getHeight() μία που εφαρμόζεται σε const και μία που εφαρμόζεται σε non-const αντικείμενα ως εξής:
 +
 +<code cpp Rectangle.cpp>
 +#include <iostream>
 +using namespace std;
 +
 +class Rectangle {
 +  private:
 +    int width, height;
 +  public:
 +    Rectangle(int width, int height);
 +    void setWidth(int width);
 +    void setHeight(int height);
 +    int getWidth() const;
 +    int getHeight() const;
 +    int getWidth() ;
 +    int getHeight();
 +};
 +
 +Rectangle::Rectangle(int width, int height) {
 +  this->width = width; this->height = height;
 +}
 +
 +void Rectangle::setWidth(int width) { this->width = width; }
 +void Rectangle::setHeight(int height) { this->height = height; }
 +int Rectangle::getWidth() const { cout << "I am the const method\n"; return width; }
 +int Rectangle::getHeight() const { return height; }
 +int Rectangle::getWidth() { cout << "I am the non-const method\n"; return width; }
 +int Rectangle::getHeight() { return height; }
 +
 +int main() {
 +  const Rectangle rect1(10,5);
 +  Rectangle rect2(10,5);
 +  cout << "rect1 width: " << rect1.getWidth() << endl;
 +  cout << "rect2 width: " << rect2.getWidth() << endl;
 +}
 +</code>
 +
 +<WRAP center round tip 80%>
 +Στο παραπάνω παράδειγμα, η ύπαρξη της //non-const// μεθόδου στο συγκεκριμένο παράδειγμα είναι πλεονασμός καθώς η //const// μέθοδος μπορεί να κληθεί και από //non-const// αντικείμενα. Όπως δείξαμε ο περιορισμός ισχύει μόνο κατά το αντίστροφο, δηλαδή ένα //const// αντικείμενο δεν μπορεί να καλέσει μία //non-const// μέθοδο.
 +</WRAP>
 +
 +
  
  
cpp/const_member_functions.txt · Last modified: 2021/05/07 07:50 (external edit)