User Tools

Site Tools


cpp:this

Ο δείκτης this

Κατά τον ορισμό συναρτήσεων της κλάσης θέλουμε συχνά να αναφερθούμε στο αντικείμενο καλεί τη συγκεκριμένη μέθοδο. Ο τελεστής χρησιμοποιείται α) κατά την υπερφόρτωση τελεστών και β) για να αποφευχθούν συγκρούσεις ονομάτων όταν τοπικές μεταβλητές και πεδία της κλάσης έχουν το ίδιο όνομα.

Το παρακάτω παράδειγμα της κλάσης Rectangle αναφέρεται στη δεύτερη περίπτωση, όπου ο κατασκευαστής της κλάσης και οι μέθοδοι της κλάσης λαμβάνουν ορίσματα που ταυτίζονται με τα ονόματα των πεδίων. Σε αυτή την περίπτωση ο δείκτης this προσδιορίζει τη διεύθυνση του τρέχοντος αντικειμένου. Μέσω του δείκτη 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 από το παραπάνω παράδειγμα, μεταγλωττίστε και εκτελέστε. Το αποτέλεσμα είναι εντελώς διαφορετικό σε αυτή τη περίπτωση. Γιατί;

cpp/this.txt · Last modified: 2020/04/08 14:32 (external edit)