sp_steve Δημοσ. 10 Δεκεμβρίου 2010 Δημοσ. 10 Δεκεμβρίου 2010 Γειά σας, Έχω δημιουργήσει μια μέθοδο στην Υπερκλάση και θέλω μέσα απ'αυτή να καλέσω μια άλλη μέθοδο η οποία βρίσκεται στην Υποκλάση... Μπορεί να γίνει κάτι τέτοιο? Και αν ναι με πιο τρόπο? Εδώ είναι ο κώδικάς μου... >class Board { public: int N; public: Board(int STR) { startGame(STR); } void startGame(int STR) { if(STR>1) void create(); } }; class Cell:public Board { public: Cell(int N) :Board(N){} void Cell::create() { //do something... } Ευχαριστω εκ των πρωτέρων...
kagelos Δημοσ. 10 Δεκεμβρίου 2010 Δημοσ. 10 Δεκεμβρίου 2010 Θα πρέπει η μέθοδος να είναι αρχικά ορισμένη στην υπερκλάση ως virtual ή abstract για να την ξέρει, και απλά να γίνεται override ή να υλοποιείται αντίστοιχα στην κλάση που κληρονομεί.
sp_steve Δημοσ. 11 Δεκεμβρίου 2010 Μέλος Δημοσ. 11 Δεκεμβρίου 2010 Θα πρέπει η μέθοδος να είναι αρχικά ορισμένη στην υπερκλάση ως virtual ή abstract για να την ξέρει, και απλά να γίνεται override ή να υλοποιείται αντίστοιχα στην κλάση που κληρονομεί. Όντως έτσι δουλεύει...Ευχαριστώ... Όμως και όταν δεν την δηλώνω ως virtual ή abstract πάλι δουλεύει... παίζει τόσο σημαντικό ρόλο αυτό ή απλά τυχαίνει αυτή την στιγμή?
nspyrou Δημοσ. 12 Δεκεμβρίου 2010 Δημοσ. 12 Δεκεμβρίου 2010 Όντως έτσι δουλεύει...Ευχαριστώ... Όμως και όταν δεν την δηλώνω ως virtual ή abstract πάλι δουλεύει... παίζει τόσο σημαντικό ρόλο αυτό ή απλά τυχαίνει αυτή την στιγμή? Τίποτα δεν είναι τυχαίο, φίλε μου, στο programming! Όπως ορθά σου ανέφερε ο φίλος kagelos (ωραίο nickname!! by the way), ο ορισμός στην Parent class γίνεται για να μπορέσει η μέθοδος να υλοποιηθεί εξολοκλήρου ή μερικώς στις child ή inherited classes. Η διαφορά μεταξύ virtual και abstract είναι οτι οι virtual μεθοδοι μπορούν να γίνουν override στις απορρέουσες κλάσεις έχοντας ήδη μερική υλοποίηση μέσα τους. Οπότε μπορείς είτε να επανα-ϋλοποιήσεις είτε να επεκτείνεις τη λειτουργικότητα της μεθόδου. Οι abstract ειναι πιο "απόλυτες"! Δεν μπορείς να τις υλοποιήσεις στην parent class, εκτός αν δημιουργήσεις άλλη κλάση που κληρονομεί απο τη συγκεκριμένη Parent class! Τώρα,, το οτι σου δούλεψε, θεωρώ οτι υπάρχει κάποια εξήγηση! Εξαρτάται με το τί εργαλείο "γρατζουνάς" (σε ποιόν compiler δουλεύεις) ...
dop Δημοσ. 15 Δεκεμβρίου 2010 Δημοσ. 15 Δεκεμβρίου 2010 Έτσι πως είναι ο κώδικάς σου όχι - ποτέ (ΠΟΤΕ) δεν καλούμε virtual functions σε constructor ( http://www.artima.com/cppsource/nevercall.html ). Αυτό που μπορείς να χρησιμοποιήσεις είναι το curiously recurring template pattern ( http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern ).
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.