Εξετάστε το ακόλουθο παράδειγμα:
``c++
// Βασική κλάση
Κατηγορία Ζώο {
κοινό:
όνομα συμβολοσειράς?
};
// Παράγωγη κλάση 1
κατηγορία σκύλος :δημόσιο Ζώο {
κοινό:
φυλή χορδών?
};
// Παράγωγη κλάση 2
κατηγορία Γάτα :δημόσιο Ζώο {
κοινό:
Χρώμα χορδής?
};
// Προερχόμενη κλάση 3 (κληρονομείται από σκύλο και γάτα)
Κατηγορία κατοικίδιο ζώο :δημόσιος σκύλος, δημόσια γάτα {
κοινό:
//...
};
```
Χωρίς εικονική κληρονομικότητα, η κλάση "Pet" θα κληρονομούσε δύο αντίγραφα της βασικής κλάσης "Animal", τα οποία θα μπορούσαν να οδηγήσουν σε σφάλματα χρόνου εκτέλεσης ή σε τεμαχισμό αντικειμένων (όπου έχει κατασκευαστεί μόνο ένα μέρος του αντικειμένου "Pet"). Για να αποφευχθεί αυτό, μπορούμε να χρησιμοποιήσουμε εικονική κληρονομικότητα καθορίζοντας τη λέξη-κλειδί «εικονική» στη δήλωση κλάσης βάσης:
``c++
// Βασική κλάση με εικονική κληρονομικότητα
κατηγορία Ζώο {
κοινό:
όνομα συμβολοσειράς?
};
```
Χρησιμοποιώντας εικονική κληρονομικότητα, η κλάση «Pet» θα κληρονομήσει μόνο ένα αντίγραφο της βασικής κλάσης «Animal», διασφαλίζοντας τη σωστή συμπεριφορά και αποτρέποντας σφάλματα χρόνου εκτέλεσης.
Πλεονεκτήματα:
1. Επίλυση ασάφειας: Βοηθά στην επίλυση της ασάφειας όταν πολλές βασικές κλάσεις έχουν την ίδια συνάρτηση μέλους ή μέλος δεδομένων.
2. Μειωμένο κόστος μνήμης: Αποφεύγει τον τεμαχισμό αντικειμένων, μειώνοντας την επιβάρυνση της μνήμης και βελτιώνοντας την απόδοση.
3. Ευελιξία: Επιτρέπει σύνθετες ιεραρχίες κληρονομικότητας όπου οι παραγόμενες κλάσεις μπορούν να κληρονομήσουν από πολλαπλές βασικές κλάσεις.
Πότε να χρησιμοποιήσετε εικονική κληρονομικότητα:
- Όταν έχετε πολλαπλή κληρονομιά και θέλετε να αποφύγετε διφορούμενα μέλη βάσης ή τεμαχισμό αντικειμένων.
- Όταν θέλετε να μοιραστείτε κοινή λειτουργικότητα σε πολλαπλές παραγόμενες κλάσεις χωρίς αντίγραφο κώδικα.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα