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