virtuelles Vererbung ist ein C ++ - Mechanismus zum Erstellen einer Basisklasse, die mehrmals von mehrmals von Objektschneide oder Laufzeitfehlern zu Problemen geerbt werden kann.
Betrachten Sie das folgende Beispiel:
`` `C ++
// Basisklasse
Klassentier {
öffentlich:
Zeichenfolge Name;
};
// Abgeleitete Klasse 1
Klassenhund:öffentliches Tier {
öffentlich:
Streichrasse;
};
// Abgeleitete Klasse 2
Klassenkatze:öffentliches Tier {
öffentlich:
Saitenfarbe;
};
// Abgeleitete Klasse 3 (Erben sowohl von Hund als auch von Katze)
Klassen Haustier:öffentlicher Hund, öffentliche Katze {
öffentlich:
// ...
};
`` `
Ohne virtuelle Vererbung würde die "PET" -Klasse zwei Kopien der Basisklasse "Animal" erben, was zu Laufzeitfehlern oder zu Objektschneide führen könnte (wobei nur ein Teil des "PET" -Objekts konstruiert wird). Um dies zu verhindern, können wir die virtuelle Vererbung verwenden, indem wir das Schlüsselwort "Virtual" in der Basisklassenerklärung angeben:
`` `C ++
// Basisklasse mit virtueller Vererbung
Klassentier {
öffentlich:
Zeichenfolge Name;
};
`` `
Durch die Verwendung der virtuellen Vererbung erbt die "PET" -Klasse nur eine Kopie der Basisklasse "Animal", um korrektes Verhalten zu gewährleisten und Laufzeitfehler zu verhindern.
Vorteile:
1. Mehrdeutigkeit: Hilft bei der Lösung von Mehrdeutigkeiten, wenn mehrere Basisklassen die gleiche Mitgliedsfunktion oder das gleiche Datenmitglied haben.
2. Speicheraufwand reduziert: Vermeidet Objektschneide, Reduzierung des Speicheraufwands und Verbesserung der Leistung.
3. Flexibilität: Ermöglicht komplexe Vererbungshierarchien, bei denen abgeleitete Klassen von mehreren Basisklassen erben können.
Wann verwenden Sie virtuelle Vererbung:
- Wenn Sie mehrfacher Vererbung haben und mehrdeutige Basismitglieder oder Objektschnitte vermeiden möchten.
- Wenn Sie gemeinsame Funktionen über mehrere abgeleitete Klassen teilen möchten, ohne Code zu duplizieren.