cpp:inheritance
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
cpp:inheritance [2019/03/07 06:14] – gthanos | cpp:inheritance [2022/05/13 07:01] (current) – [Κληρονομικότητα] gthanos | ||
---|---|---|---|
Line 3: | Line 3: | ||
Οι κλάσεις στη C++ μπορούν να επεκταθούν μέσω της κληρονομικότητας, | Οι κλάσεις στη C++ μπορούν να επεκταθούν μέσω της κληρονομικότητας, | ||
- | Στο παρακάτω παράδειγμα, | + | Στο παρακάτω παράδειγμα, |
- | <code cpp Shape2D.cpp> | + | <code cpp Shape.hpp> |
- | #include < | + | class Shape { |
- | #include < | + | |
- | using namespace std; | + | |
- | + | ||
- | #ifndef __SHAPE2D__ | + | |
- | #define __SHAPE2D__ | + | |
- | + | ||
- | class Shape2D | + | |
unsigned int color; | unsigned int color; | ||
protected: | protected: | ||
unsigned char borderWidth; | unsigned char borderWidth; | ||
public: | public: | ||
- | | + | |
- | | + | |
void setColor(unsigned int c); | void setColor(unsigned int c); | ||
void setColor(unsigned char red, unsigned char blue, unsigned char green); | void setColor(unsigned char red, unsigned char blue, unsigned char green); | ||
unsigned int getColor(); | unsigned int getColor(); | ||
- | unsigned char getBorderWidth(); | ||
- | void setBorderWidth(unsigned char bw); | ||
unsigned int getArea(); | unsigned int getArea(); | ||
}; | }; | ||
+ | </ | ||
- | void Shape2D:: | + | <code cpp Shape.cpp> |
- | void Shape2D:: | + | #include < |
+ | using namespace std; | ||
+ | |||
+ | #include " | ||
+ | |||
+ | void Shape:: | ||
+ | void Shape:: | ||
color = red; | color = red; | ||
color <<= 8; | color <<= 8; | ||
Line 37: | Line 35: | ||
} | } | ||
- | unsigned int Shape2D:: | + | unsigned int Shape:: |
return color; | return color; | ||
} | } | ||
- | Shape2D::Shape2D(unsigned int c, unsigned char bw) : color(c), borderWidth(bw) {} | + | Shape::Shape(unsigned int c, unsigned char bw) : color(c), borderWidth(bw) { |
- | Shape2D::Shape2D(unsigned char red, unsigned char blue, unsigned char green, unsigned char bw) : borderWidth(bw) { | + | } |
+ | |||
+ | Shape::Shape(unsigned char red, unsigned char blue, unsigned char green, unsigned char bw) : borderWidth(bw) { | ||
setColor(red, | setColor(red, | ||
} | } | ||
- | unsigned int Shape2D::getArea() { | + | unsigned int Shape::getArea() { |
return 0; | return 0; | ||
} | } | ||
- | |||
- | unsigned char Shape2D:: | ||
- | void Shape2D:: | ||
- | |||
- | #endif | ||
</ | </ | ||
- | <code cpp Rectangle.cpp> | + | <code cpp Rectangle.hpp> |
- | # | + | # |
- | using namespace std; | + | |
- | #include " | + | class Rectangle : public |
- | + | ||
- | class Rectangle : public | + | |
private: | private: | ||
unsigned int width, height; | unsigned int width, height; | ||
Line 72: | Line 64: | ||
unsigned int getHeight(); | unsigned int getHeight(); | ||
unsigned int getArea(); | unsigned int getArea(); | ||
+ | | ||
+ | unsigned char getBorderWidth(); | ||
+ | void setBorderWidth(unsigned char bw); | ||
}; | }; | ||
+ | </ | ||
+ | |||
+ | <code cpp Rectangle.cpp> | ||
+ | #include < | ||
+ | using namespace std; | ||
+ | |||
+ | #include " | ||
Rectangle:: | Rectangle:: | ||
- | | + | |
void Rectangle:: | void Rectangle:: | ||
Line 83: | Line 85: | ||
unsigned int Rectangle:: | unsigned int Rectangle:: | ||
- | return | + | |
+ | * from the parent class. | ||
+ | */ | ||
+ | int area = Shape:: | ||
+ | | ||
} | } | ||
+ | |||
+ | unsigned char Rectangle:: | ||
+ | void Rectangle:: | ||
</ | </ | ||
- | <code cpp ShapeUsage.cpp> | + | <code cpp RectangleUsage.cpp> |
- | #include " | + | #include " |
+ | #include < | ||
+ | using namespace std; | ||
int main() { | int main() { | ||
Rectangle rectangle(0xffffff, | Rectangle rectangle(0xffffff, | ||
+ | rectangle.setBorderWidth(8); | ||
| | ||
cout << " | cout << " | ||
- | cout << " color: 0x" << hex << rectangle.getColor() << dec; | + | cout << " color: 0x" << |
cout << " borderWidth: | cout << " borderWidth: | ||
cout << " area: " << rectangle.getArea() << endl; | cout << " area: " << rectangle.getArea() << endl; | ||
Line 103: | Line 115: | ||
Από τα παραπάνω παρατηρούμε τα εξής: | Από τα παραπάνω παρατηρούμε τα εξής: | ||
- | - Η κληρονομικότητα δηλώνεται μέσω της δήλωσης '' | + | - Η κληρονομικότητα δηλώνεται μέσω της δήλωσης '' |
- Η απόγονος κλάση μπορεί να ορίσει επιπλέον πεδία και επιπλέον μεθόδους. Η απόγονος κλάση // | - Η απόγονος κλάση μπορεί να ορίσει επιπλέον πεδία και επιπλέον μεθόδους. Η απόγονος κλάση // | ||
- Η απόγονος κλάση μπορεί να επαναορίσει μία μέθοδο η οποία είναι ήδη ορισμένη στη γονική κλάση. Η απόγονος κλάση // | - Η απόγονος κλάση μπορεί να επαναορίσει μία μέθοδο η οποία είναι ήδη ορισμένη στη γονική κλάση. Η απόγονος κλάση // | ||
- | - Τα μέλη της γονικής κλάσης //Shape2D// που είναι δηλωμένα ως // | + | - Τα μέλη της γονικής κλάσης //Shape// που είναι δηλωμένα ως // |
- | - Τα μέλη της γονικής κλάσης //Shape2D// που είναι δηλωμένα ως //private// δεν είναι προσβάσιμα από την απόγονο κλάση // | + | - Τα μέλη της γονικής κλάσης //Shape// που είναι δηλωμένα ως //private// δεν είναι προσβάσιμα από την απόγονο κλάση // |
- | - Όπως και στη Java, τα μέλη της γονικής κλάσης //Shape2D// ή της απογόνου κλάσης // | + | - Όπως και στη Java, τα μέλη της γονικής κλάσης //Shape// ή της απογόνου κλάσης // |
Συνοπτικά ο πίνακας προσβασιμότητας παρατίθεται παρακάτω: | Συνοπτικά ο πίνακας προσβασιμότητας παρατίθεται παρακάτω: | ||
^ ^ μέλη της γονικής κλάσης | ^ ^ μέλη της γονικής κλάσης | ||
^ προσβασιμότητα | ^ προσβασιμότητα | ||
- | | μέλη | + | | από |
- | | μέλη | + | | από |
- | | μη μέλη της | + | | από |
+ | ===== Κλήση μιας επανα-ορισμένης μεθόδου της γονικής κλάσης από την υποκλάση ===== | ||
- | <WRAP center round info 80%> | + | Όταν η απόγονος κλάση επαναορίζει μία μέθοδο με το ίδιο |
- | Όταν η απόγονος κλάση επαναορίζει μία μέθοδο με το ίδιο signature (ίδιο όνομα, ίδιος αριθμός και τύπος ορισμάτων) τότε συχνά θέλουμε να χρησιμοποιήσουμε τη γονική | + | |
<code cpp> | <code cpp> | ||
unsigned int Rectangle:: | unsigned int Rectangle:: | ||
- | return | + | return |
} | } | ||
</ | </ | ||
- | </ | ||
cpp/inheritance.1551939296.txt.gz · Last modified: 2019/03/07 06:14 by gthanos