cpp:classes
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
cpp:classes [2017/04/12 07:34] – gthanos | cpp:classes [2020/04/08 09:51] – gthanos | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Κλάσεις και Αντικείμενα ====== | ====== Κλάσεις και Αντικείμενα ====== | ||
- | Όπως και στη Java οι κλάσεις στη C++ δημιουργούν νέους τύπους δεδομένων. Παρακάτω δίνεται | + | Όπως και στη Java οι κλάσεις στη C++ δημιουργούν νέους τύπους δεδομένων. Παρακάτω δίνεται |
<code c++ Rectangle.cpp> | <code c++ Rectangle.cpp> | ||
Line 11: | Line 11: | ||
int width, height; | int width, height; | ||
public: | public: | ||
- | void set_values | + | void setWidth(int w); |
- | int area() {return width*height;} | + | void setHeight(int h); |
+ | int getWidth() const; | ||
+ | int getHeight() const; | ||
}; | }; | ||
- | void Rectangle::set_values | + | void Rectangle::setWidth(int w) { width = w; } |
- | | + | void Rectangle:: |
- | height = y; | + | int Rectangle:: |
- | } | + | int Rectangle:: |
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; | ||
} | } | ||
</ | </ | ||
- | Από τον | + | Η παραπάνω κλάση διαθέτει τα πεδία τύπου //int width, height// και τις μεθόδους //setWidth, setHeight, getWidth, getHeight//. Η κλάση |
- | - Σε αναλογία με την Java οι κλάσεις περιέχουν πεδία και συναρτήσεις(μεθόδους). | + | |
- | - Οποιαδήποτε μέθοδος μπορεί να οριστεί ολόκληρη μέσα στη δήλωση της κλάσης ή να ορίσει μόνο | + | |
- | - Μπορούμε να περιορίσουμε την προσβασιμότητα των πεδίων και των μεθόδων μίας | + | |
- | - Τα πεδία και οι μέθοδοι ενός αντικειμένου είναι προσβάσιμα με χρήση του | + | |
- | - Στην παραπάνω κλάση δεν ορίζεται κατασκευαστής. Η δήλωση '' | + | |
+ | ===== Διάκριση μεταξύ δήλωσης της κλάσης και υλοποίησης της κλάσης ===== | ||
+ | |||
+ | Στο προηγούμενο παράδειγμα, | ||
+ | |||
+ | <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:: | ||
+ | </ | ||
+ | |||
+ | Ο λόγος που διακρίνουμε μία κλάση σε δήλωση και υλοποίηση είναι ότι η δήλωση της κλάσης μπορεί να χρειαστεί να γίνει //include// από περισσότερα του ενός αρχεία στο ίδιο πρόγραμμα. Η υλοποίηση όμως δεν θέλουμε να συμπεριληφθεί σε περισσότερα του ενός μεταγλωττισμένα αρχεία στο ίδιο πρόγραμμα, | ||
+ | |||
+ | <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(); | ||
+ | } | ||
+ | </ |
cpp/classes.txt · Last modified: 2021/05/06 23:01 (external edit)