Sobes.tech
Junior

Τι είναι η υπερφόρτωση και η επανακαθορισμός μεθόδων σε C++;

sobes.tech AI

Απάντηση από AI

Method Overloading (Method Overloading):

  • Επιτρέπει να υπάρχουν αρκετές μέθοδοι με το ίδιο όνομα σε μια κλάση.
  • Διαφέρουν ως προς την υπογραφή (αριθμό και/ή τύπους παραμέτρων).
  • Ο τύπος επιστροφής δεν συμμετέχει στον ορισμό της υπογραφής για υπερφόρτωση.
  • Η επιλογή μιας συγκεκριμένης μεθόδου καθορίζεται από τον μεταγλωττιστή βάσει των τύπων των ορισμάτων κατά την κλήση (στατική δέσμευση).
class MyClass {
public:
    void print(int a) {
        // Εκτύπωση ακέραιου
    }

    void print(double d) {
        // Εκτύπωση δεκαδικού
    }

    void print(int a, int b) {
        // Εκτύπωση δύο ακέραιων
    }
};

Υπερφόρτωση μεθόδων (Method Overriding):

  • Επιτρέπει σε μια κλάση που κληρονομεί να παρέχει μια συγκεκριμένη υλοποίηση μιας μεθόδου που έχει ήδη οριστεί στην βασική κλάση.
  • Η μέθοδος στην κλάση που κληρονομεί πρέπει να έχει την ίδια υπογραφή (όνομα, αριθμό και τύπους παραμέτρων) και τον ίδιο τύπο επιστροφής (ή έναν συμβατό τύπο επιστροφής).
  • Χρησιμοποιείται με εικονικές συναρτήσεις (virtual) για την υλοποίηση πολυμορφισμού.
  • Η επιλογή της συγκεκριμένης υλοποίησης της μεθόδου καθορίζεται κατά την εκτέλεση (δυναμική δέσμευση), ανάλογα με τον πραγματικό τύπο του αντικειμένου.
class Base {
public:
    virtual void display() {
        // Υλοποίηση στην βασική κλάση
    }
};

class Derived : public Base {
public:
    void display() override { // Η λέξη-κλειδί override (από C++11) βοηθά στην αποφυγή λαθών
        // Συγκεκριμένη υλοποίηση στην κλάση που κληρονομεί
    }
};

Βασικές διαφορές:

Χαρακτηριστικό Method Overloading Method Overriding
Τοποθεσία εφαρμογής Σε μια ίδια κλάση Σε βασικές και παράγωγες κλάσεις
Όνομα μεθόδου Το ίδιο Το ίδιο
Υπογραφή μεθόδου Διαφορετική Ίδια
Μηχανισμός επιλογής Στατική δέσμευση (compile-time) Δυναμική δέσμευση (εκτέλεση)
Χρησιμοποιείται με Συνήθεις συναρτήσεις Εικονικές συναρτήσεις
Στόχος Διάφορες ενέργειες για διαφορετικούς τύπους Συγκεκριμένη υλοποίηση στην κληρονομιά