====== Ο δείκτης this ======
Κατά τον ορισμό συναρτήσεων της κλάσης θέλουμε συχνά να αναφερθούμε στο αντικείμενο καλεί τη συγκεκριμένη μέθοδο. Ο τελεστής χρησιμοποιείται //α)// κατά την [[cpp:operator_overloading|υπερφόρτωση τελεστών]] και //β)// για να αποφευχθούν συγκρούσεις ονομάτων όταν τοπικές μεταβλητές και πεδία της κλάσης έχουν το ίδιο όνομα.
Το παρακάτω παράδειγμα της κλάσης Rectangle αναφέρεται στη δεύτερη περίπτωση, όπου ο κατασκευαστής της κλάσης και οι μέθοδοι της κλάσης λαμβάνουν ορίσματα που ταυτίζονται με τα ονόματα των πεδίων. Σε αυτή την περίπτωση ο δείκτης //this// προσδιορίζει τη διεύθυνση του τρέχοντος αντικειμένου. Μέσω του δείκτη this μπορούμε να διακρίνουμε ένα πεδίο της κλάσης και μία τοπική μεταβλητή ή παράμετρο συνάρτησης που έχουν το ίδιο όνομα.
#include
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; }
#include "Rectangle.cpp"
int main () {
Rectangle rect(5,6);
cout << "area: " << rect.getWidth() * rect.getHeight() << endl;
return 0;
}
Αφαιρέστε τον δείκτη //this// από το παραπάνω παράδειγμα, μεταγλωττίστε και εκτελέστε. Το αποτέλεσμα είναι εντελώς διαφορετικό σε αυτή τη περίπτωση. Γιατί;