This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | Previous revision | ||
|
cpp:classes [2021/04/27 08:09] gthanos [Διάκριση μεταξύ δήλωσης της κλάσης και υλοποίησης της κλάσης] |
cpp:classes [2021/05/06 23:01] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Κλάσεις και Αντικείμενα ====== | ||
| - | Όπως και στη Java οι κλάσεις στη C++ δημιουργούν νέους τύπους δεδομένων. Παρακάτω δίνεται το παράδειγμα της κλάσης // | ||
| - | |||
| - | <code c++ Rectangle.cpp> | ||
| - | #include < | ||
| - | using namespace std; | ||
| - | |||
| - | class Rectangle { | ||
| - | private: | ||
| - | int width, height; | ||
| - | public: | ||
| - | void setWidth(int w); | ||
| - | void setHeight(int h); | ||
| - | int getWidth() const; | ||
| - | int getHeight() const; | ||
| - | }; | ||
| - | |||
| - | void Rectangle:: | ||
| - | void Rectangle:: | ||
| - | int Rectangle:: | ||
| - | int Rectangle:: | ||
| - | |||
| - | int main () { | ||
| - | Rectangle rect; | ||
| - | rect.setWidth(5); | ||
| - | rect.setHeight(6); | ||
| - | cout << "area: " << rect.getWidth() * rect.getHeight() << endl; | ||
| - | return 0; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Η παραπάνω κλάση διαθέτει τα πεδία τύπου //int width, height// και τις μεθόδους //setWidth, setHeight, getWidth, getHeight// | ||
| - | |||
| - | ===== Διάκριση μεταξύ δήλωσης της κλάσης και υλοποίησης της κλάσης ===== | ||
| - | |||
| - | Στο προηγούμενο παράδειγμα, | ||
| - | |||
| - | <code cpp Rectangle.hpp> | ||
| - | #include < | ||
| - | using namespace std; | ||
| - | |||
| - | class Rectangle { | ||
| - | private: | ||
| - | int width, height; | ||
| - | public: | ||
| - | void setWidth(int w); | ||
| - | void setHeight(int h); | ||
| - | int getWidth() const; | ||
| - | int getHeight() const; | ||
| - | }; | ||
| - | </ | ||
| - | |||
| - | <code cpp Rectangle.cpp> | ||
| - | #include " | ||
| - | |||
| - | void Rectangle:: | ||
| - | void Rectangle:: | ||
| - | int Rectangle:: | ||
| - | int Rectangle:: | ||
| - | </ | ||
| - | |||
| - | Ο λόγος που διακρίνουμε μία κλάση σε δήλωση και υλοποίηση είναι ότι η δήλωση της κλάσης πιθανόν να συμπεριληφθεί μέσω μιας εντολής ''# | ||
| - | |||
| - | <WRAP important 80% center round> | ||
| - | Στη συνέχεια, | ||
| - | </ | ||
| - | |||
| - | |||
| - | ===== Οι μέθοδοι της κλάσης ===== | ||
| - | |||
| - | Οι μέθοδοι της κλάσης είναι συναρτήσεις οι οποίες έχουν απευθείας πρόσβαση στα πεδία (μεταβλητές) της κλάσης. Οι μέθοδοι ορίζονται μέσα στην κλάση ή ορίζεται το πρότυπο τους μέσα στην κλάση και η υλοποίηση τους εκτός. Από το παρακάτω παράδειγμα παρατηρήστε τους δύο διαφορετικούς τρόπους ορισμού των μεθόδων // | ||
| - | |||
| - | <code c++ Rectangle.hpp> | ||
| - | #include < | ||
| - | 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; } | ||
| - | }; | ||
| - | |||
| - | </ | ||
| - | |||
| - | <code c++ Rectangle.cpp> | ||
| - | #include " | ||
| - | |||
| - | int Rectangle:: | ||
| - | int Rectangle:: | ||
| - | void Rectangle:: | ||
| - | </ | ||
| - | |||
| - | Οι δύο παραπάνω τρόποι ορισμού μιας μεθόδου της κλάσης είναι ισοδύναμοι με την διαφορά ότι η μέθοδος // | ||
| - | |||
| - | Για τον ορισμό της μεθόδου // | ||
| - | |||
| - | Παρατηρήστε ότι οι μέθοδοι // | ||
| - | |||
| - | ===== Πεδία που περιγράφονται από κλάσεις ===== | ||
| - | |||
| - | Εκτός από πεδία βασικού τύπου μπορούμε να έχουμε και πεδία κλάσεων των οποίων ο τύπος περιγράφεται από κλάσεις. Παράδειγμα μιας τέτοια κλάσης είναι το ορθογώνιο παραλληλεπίπεδο - κυβοειδές (κλάση Cuboid) το οποίο έχει ένα πεδίο τύπου Rectangle το οποίο ορίσαμε παραπάνω. | ||
| - | |||
| - | <code cpp Cuboid.hpp> | ||
| - | #include < | ||
| - | using namespace std; | ||
| - | |||
| - | #include " | ||
| - | |||
| - | class Cuboid { | ||
| - | private: | ||
| - | int length; | ||
| - | Rectangle rect; | ||
| - | public: | ||
| - | void setRectangle(Rectangle r); | ||
| - | Rectangle getRectangle() const; | ||
| - | void setLength(int l); | ||
| - | int getLength() const; | ||
| - | int volume(); | ||
| - | }; | ||
| - | </ | ||
| - | |||
| - | <code cpp Cuboid.cpp> | ||
| - | #include " | ||
| - | |||
| - | void Cuboid:: | ||
| - | Rectangle Cuboid:: | ||
| - | void Cuboid:: | ||
| - | int Cuboid:: | ||
| - | |||
| - | int Cuboid:: | ||
| - | return length * rect.getWidth() * rect.getHeight(); | ||
| - | } | ||
| - | </ | ||