This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
cpp:polymorphism [2017/04/25 09:43] gthanos |
cpp:polymorphism [2020/04/15 08:48] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Δυναμικός Πολυμορφισμός ====== | ||
| - | |||
| - | Ας επανέλθουμε στο αρχικό παράδειγμα της κληρονομικότητας και ας ορίσουμε δύο νέες μεταβλητές α) μία μεταβλητή τύπου δείκτη και μία μεταβλητή τύπου αναφορά σε ένα αντικείμενο τύπου //Shape2D// ως εξής: | ||
| - | |||
| - | <code cpp ShapeUsage.cpp> | ||
| - | #include " | ||
| - | |||
| - | int main() { | ||
| - | Rectangle rectangle(0xffffff, | ||
| - | Shape2D &ref = rectangle, *ptr = & | ||
| - | |||
| - | cout << " | ||
| - | cout << " | ||
| - | cout << " | ||
| - | | ||
| - | return 0; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Μεταγλωττίζοντας και εκτελώντας τον παραπάνω κώδικα λαμβάνουμε τα εξής: | ||
| - | < | ||
| - | Rectangle area: 200 | ||
| - | Reference area: 0 | ||
| - | Pointer area: 0 | ||
| - | </ | ||
| - | |||
| - | Από τα παραπάνω συμπεραίνουμε ότι η επιλογή κλήσης της μεθόδου //getArea// δεν γίνεται δυναμικά με βάση τον τύπο του αντικειμένου στον οποίο δείχνει ο δείκτης ή η αναφορά, | ||
| - | |||
| - | Εάν θέλουμε η επιλογή της μεθόδου να γίνεται δυναμικά με βάση τον τύπο του αντικειμένου που δείχνει ο δείκτης ή η αναφορά θα πρέπει να δηλώσουμε τη μέθοδο //getArea// στη γονική κλάση //Shape2D// ως // | ||
| - | <code cpp> | ||
| - | <class Shape2D { | ||
| - | public: | ||
| - | virtual unsigned int getArea(); | ||
| - | } | ||
| - | unsigned int Shape2D:: | ||
| - | </ | ||
| - | |||
| - | Με αυτό τον τρόπο δηλώνουμε προς τον // | ||
| - | < | ||
| - | Rectangle area: 200 | ||
| - | Reference area: 200 | ||
| - | Pointer area: 200 | ||
| - | </ | ||
| - | |||