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
Next revision Both sides next revision
cpp:this [2020/04/08 14:32]
cpp:this [2020/04/08 15:28]
gthanos
Line 1: Line 1:
 +====== Ο δείκτης this ======
 +
 +Κατά τον ορισμό συναρτήσεων της κλάσης θέλουμε συχνά να αναφερθούμε στο αντικείμενο καλεί τη συγκεκριμένη μέθοδο. Ο τελεστής χρησιμοποιείται //α)// κατά την [[cpp:operator_overloading|υπερφόρτωση τελεστών]] και //β)// για να αποφευχθούν συγκρούσεις ονομάτων όταν τοπικές μεταβλητές και πεδία της κλάσης έχουν το ίδιο όνομα. Το παρακάτω παράδειγμα της κλάσης Rectangle αναφέρεται στην 2η περίπτωση, όπου ο κατασκευαστής της κλάσης και οι μέθοδοι της κλάσης λαμβάνουν ορίσματα που ταυτίζονται με τα ονόματα των πεδίων. Σε αυτή την περίπτωση ο δείκτης //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)