Προς το περιεχόμενο

C++/Κλήση μεθόδου


sp_steve

Προτεινόμενες αναρτήσεις

Δημοσ.

Γειά σας,

 

Έχω δημιουργήσει μια μέθοδο στην Υπερκλάση και θέλω μέσα απ'αυτή να καλέσω μια άλλη μέθοδο η οποία βρίσκεται στην Υποκλάση...

Μπορεί να γίνει κάτι τέτοιο? Και αν ναι με πιο τρόπο?

 

Εδώ είναι ο κώδικάς μου...

 

>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...              
     } 

 

Ευχαριστω εκ των πρωτέρων...

Δημοσ.

Θα πρέπει η μέθοδος να είναι αρχικά ορισμένη στην υπερκλάση ως virtual ή abstract για να την ξέρει, και απλά να γίνεται override ή να υλοποιείται αντίστοιχα στην κλάση που κληρονομεί.

Δημοσ.

Θα πρέπει η μέθοδος να είναι αρχικά ορισμένη στην υπερκλάση ως virtual ή abstract για να την ξέρει, και απλά να γίνεται override ή να υλοποιείται αντίστοιχα στην κλάση που κληρονομεί.

 

Όντως έτσι δουλεύει...Ευχαριστώ... Όμως και όταν δεν την δηλώνω ως virtual ή abstract πάλι δουλεύει... παίζει τόσο σημαντικό ρόλο αυτό ή απλά τυχαίνει αυτή την στιγμή?

Δημοσ.

Όντως έτσι δουλεύει...Ευχαριστώ... Όμως και όταν δεν την δηλώνω ως virtual ή abstract πάλι δουλεύει... παίζει τόσο σημαντικό ρόλο αυτό ή απλά τυχαίνει αυτή την στιγμή?

 

Τίποτα δεν είναι τυχαίο, φίλε μου, στο programming! Όπως ορθά σου ανέφερε ο φίλος kagelos (ωραίο nickname!! :lol: by the way), ο ορισμός στην Parent class γίνεται για να μπορέσει η μέθοδος να υλοποιηθεί εξολοκλήρου ή μερικώς στις child ή inherited classes. Η διαφορά μεταξύ virtual και abstract είναι οτι οι virtual μεθοδοι μπορούν να γίνουν override στις απορρέουσες κλάσεις έχοντας ήδη μερική υλοποίηση μέσα τους. Οπότε μπορείς είτε να επανα-ϋλοποιήσεις είτε να επεκτείνεις τη λειτουργικότητα της μεθόδου.

 

Οι abstract ειναι πιο "απόλυτες"! Δεν μπορείς να τις υλοποιήσεις στην parent class, εκτός αν δημιουργήσεις άλλη κλάση που κληρονομεί απο τη συγκεκριμένη Parent class!

 

Τώρα,, το οτι σου δούλεψε, θεωρώ οτι υπάρχει κάποια εξήγηση! Εξαρτάται με το τί εργαλείο "γρατζουνάς" (σε ποιόν compiler δουλεύεις) ...

Δημοσ.

Έτσι πως είναι ο κώδικάς σου όχι - ποτέ (ΠΟΤΕ) δεν καλούμε virtual functions σε constructor ( http://www.artima.com/cppsource/nevercall.html ).

Αυτό που μπορείς να χρησιμοποιήσεις είναι το curiously recurring template pattern ( http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern ).

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...