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) | Δυναμική δέσμευση (εκτέλεση) |
| Χρησιμοποιείται με | Συνήθεις συναρτήσεις | Εικονικές συναρτήσεις |
| Στόχος | Διάφορες ενέργειες για διαφορετικούς τύπους | Συγκεκριμένη υλοποίηση στην κληρονομιά |