User Tools

Site Tools


cpp:classes

Differences

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

Link to this comparison view

Next revision
Previous revision
Next revisionBoth sides next revision
cpp:classes [2017/04/10 12:54] – created gthanoscpp:classes [2020/04/08 08:06] gthanos
Line 1: Line 1:
 ====== Κλάσεις και Αντικείμενα ====== ====== Κλάσεις και Αντικείμενα ======
  
-Όπως και στη Java οι κλάσεις στη C++ δημιουργούν νέους τύπους δεδομένων. Παρακάτω δίνεται ένα παράδειγμα δήλωσης της κλάσης //Rectangle// με παράλληλη δημιουργία ενός αντικειμένου της κλάσης αυτής.+Όπως και στη Java οι κλάσεις στη C++ δημιουργούν νέους τύπους δεδομένων. Παρακάτω δίνεται το παράδειγμα της κλάσης //Rectangle// με παράλληλη δημιουργία ενός αντικειμένου της κλάσης αυτής.
  
 <code c++ Rectangle.cpp> <code c++ Rectangle.cpp>
Line 11: Line 11:
     int width, height;     int width, height;
   public:   public:
-    void set_values (int,int); +    void setWidth(int w); 
-    int area() {return width*height;}+    void setHeight(int h); 
 +    int getWidth(const
 +    int getHeight() const;
 }; };
  
-void Rectangle::set_values (int x, int y) { +void Rectangle::setWidth(int w) { width = w} 
-  width = x+void Rectangle::setHeight(int h) { height = h} 
-  height = y+int Rectangle::getWidth() const { return width; } 
-}+int Rectangle::getHeight() const { return height; }
  
 int main () { int main () {
   Rectangle rect;   Rectangle rect;
-  rect.set_values (3,4); +  rect.setWidth(5); 
-  cout << "area: " << rect.area();+  rect.setHeight(6); 
 +  cout << "area: " << rect.getWidth() * rect.getHeight() << endl;
   return 0;   return 0;
 } }
 </code> </code>
  
-Από τον παραπάνω κώδικα παρατηρούμε τα εξής+Η παραπάνω κλάση διαθέτει τα πεδία τύπου //int width, height// και τις μεθόδους //setWidth, setHeight, getWidth, getHeight//. Η κλάση δεν διαθέτει κατασκευαστή. Η δήλωση ''Rect rect;'' στη μέθοδο //main()// δημιουργεί ένα αντικείμενο με κλήση του //default// κατασκευαστή. 
-  - Σε αναλογία με την Java οι κλάσεις περιέχουν πεδία και μεθόδους. + 
-  - Μία μέθοδος μπορεί να ορίστεί ολόκληρη μέσα στη δήλωση της κλάσης ή να ορίσει μόνο το prototype μέσα στη δήλωση της κλάσης και τη υλοποιήση της εκτός της κλάσης. Η υλοποίηση της μεθόδου εκτός της κλάσης γίνεται με χρήση του τελεστή ''::'' (δες ''void Rectangle::set_values (int x, int y)''). +===== Οι μέθοδοι της κλάσης ===== 
-  - Μπορούμε να περιορίσουμε την προσβασιμότητα των πεδίων και των μεθόδων μίας κλάσης με χρήση //προσδιοριστών πρόσβασης//.+ 
 +Οι μέθοδοι της κλάσης είναι συναρτήσεις οι οποίες έχουν απευθείας πρόσβαση στα πεδία (μεταβλητές) της κλάσης. Οι μέθοδοι ορίζονται μέσα στην κλάση ή ορίζεται το πρότυπο τους μέσα στην κλάση και η υλοποίηση τους εκτός. Από το παρακάτω παράδειγμα παρατηρήστε τους δύο διαφορετικούς τρόπους ορισμού των μεθόδων //setWidth// και //setHeight//. H υλοποίηση της //setHeight// ορίζεται μέσα στη δήλωση της κλάσης, ενώ η υλοποιηση της //setWidth// έξω από την κλάση. 
 + 
 +<code c++ Rectangle.cpp> 
 +#include <iostream> 
 +using namespace std; 
 + 
 +class Rectangle { 
 +  private: 
 +    int width, height; 
 +  public: 
 +    int getWidth() const; 
 +    int getHeight() const; 
 +    void setWidth(int w); 
 +    void setHeight(int h) { height = h; } 
 +}; 
 + 
 +int Rectangle::getWidth() const { return width;} 
 +int Rectangle::getHeight() const { return height;} 
 +void Rectangle::setWidth(int w) { width = w; } 
 +</code> 
 + 
 +Οι δύο παραπάνω τρόποι ορισμού μίας μεθόδου της κλάσης είναι ισοδύναμοι με την διαφορά ότι η μέθοδος //setHeight// ορίζεται ως //inline// ακόμη και εάν η λέξη //inline// δεν αναφέρεται ρητά. Για τον ορισμό της μεθόδου //setWidth// εκτός της κλάσης είναι απαραίτητη η χρήση του ονόματος της κλάσης ακολουθούμενη από το //scope operator// (''Rectangle::setWidth(int w)''). Η χρήση του //scope operator// εξασφαλίζει ότι η μέθοδος ανήκει στην κλάση και δεν αποτελεί αυτόνομη μέθοδο του προγράμματος
 + 
 +<WRAP center round important 80%> 
 +Οι μέθοδοι //getWidth// και //getHeight// έχουν το προσδιοριστή **const** αμέσως μετά τη δήλωση τους. Ο προσδιοριστής //const// αμέσως μετά τη δήλωση, δηλώνει ότι η συγκεκριμένη συνάρτηση **δεν μεταβάλλει το αντικείμενο στο οποίο ανήκει**. 
 +</WRAP> 
  
cpp/classes.txt · Last modified: 2021/05/06 23:01 (external edit)