User Tools

Site Tools


cpp:this

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Previous revision
cpp:this [2020/04/08 14:32]
cpp:this [2020/04/08 15:32]
gthanos
Line 1: Line 1:
 +====== Ο δείκτης this ======
 +
 +Κατά τον ορισμό συναρτήσεων της κλάσης θέλουμε συχνά να αναφερθούμε στο αντικείμενο καλεί τη συγκεκριμένη μέθοδο. Ο τελεστής χρησιμοποιείται //α)// κατά την [[cpp:operator_overloading|υπερφόρτωση τελεστών]] και //β)// για να αποφευχθούν συγκρούσεις ονομάτων όταν τοπικές μεταβλητές και πεδία της κλάσης έχουν το ίδιο όνομα. 
 +
 +Το παρακάτω παράδειγμα της κλάσης Rectangle αναφέρεται στη δεύτερη περίπτωση, όπου ο κατασκευαστής της κλάσης και οι μέθοδοι της κλάσης λαμβάνουν ορίσματα που ταυτίζονται με τα ονόματα των πεδίων. Σε αυτή την περίπτωση ο δείκτης //this// προσδιορίζει τη διεύθυνση του τρέχοντος αντικειμένου. Μέσω του δείκτη this μπορούμε να διακρίνουμε ένα πεδίο της κλάσης και μία τοπική μεταβλητή ή παράμετρο συνάρτησης που έχουν το ίδιο όνομα.
 +
 +<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();
 +    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() { return width; }
 +int Rectangle::getHeight() { return height; }
 +</code>
 +
 +<code cpp RectangleUsage.cpp>
 +#include "Rectangle.cpp"
 +
 +int main () {
 +  Rectangle rect(5,6);
 +  cout << "area: " << rect.getWidth() * rect.getHeight() << endl;
 +  return 0;
 +}
 +</code>
 +
 +<WRAP center round todo 80%>
 +Αφαιρέστε τον δείκτη //this// από το παραπάνω παράδειγμα, μεταγλωττίστε και εκτελέστε. Το αποτέλεσμα είναι εντελώς διαφορετικό σε αυτή τη περίπτωση. Γιατί;
 +</WRAP>
 +
  
cpp/this.txt · Last modified: 2020/04/08 14:32 (external edit)