Zum Beispiel hat die Klasse Plant
eine virtual void info()
Methode. Die Klasse flower
stammt von Plant
.
Ist Plant
verpflichtet, eine eigene Implementierung der Methode zu haben?Müssen abgeleitete Klassen ihre eigene Version einer virtuellen Funktion haben, die auf der Basis deklariert ist?
Antwort
Wenn die Funktion pure virtual ist, wird virtual void info() = 0;
deklariert, dann Nein. Sonst Ja.
Nr
Basisklassen nicht ihre eigene Implementierung einer virtuellen Methode benötigen, die von einem dervided Klasse implementiert wird. Sie können jedoch eine Implementierung haben.
Um die Implementierung in der Basisklasse zu überspringen, machen Sie es einfach rein virtuell, z.
virtual void info() = 0;
In diesem Fall alle abgeleiteten Klassen - oder um genauer zu sein: - die virtuelle Methode implementieren muss jede abgeleitete Klasse, die Sie eine Instanz haben wollen.
Aber die Frage ist anders herum, fürchte ich. Ich sprach über die Deklaration der virtuellen Funktion auf der Basisklasse und nicht auf der abgeleiteten. –
- 1. Basis und abgeleitete Klassen C++
- 2. Ihre eigene malloc-Funktion machen?
- 3. C++ - Parameter einer rein virtuellen Funktion
- 4. Mathe-Klassen: Beweisen Sie, dass MUNIT ihre eigene Negation ist
- 5. Müssen abgeleitete Klassen die Bewegungssemantik implementieren, wenn eine Basis sie bereitstellt?
- 6. C++ | Zugriff auf die abgeleitete Klassenmethode über Zeiger-zu-Basis?
- 7. So rufen Sie die abgeleitete Methode von der Basis
- 8. Reflektierende abgeleitete Klassen in C#
- 9. Werkzeug zu verschmelzen Basis und Abgeleitete C# Klassen
- 10. Warum müssen Entity-Klassen eine @Id haben?
- 11. private virtuelle Funktion der Basis von privaten virtuellen Funktion abgeleitet
- 12. Aufruf der virtuellen Funktion von den meisten abgeleiteten Klassen
- 13. Haskell schreiben Sie Ihre Version einer ($) -Funktion
- 14. Collections.sort auf Liste <Interface> wenn Implementierer Klassen haben ihre eigene compareTo
- 15. Wie definiere ich die Eigenschaft einer Funktion, die ihre eigene Inverse in Idris ist?
- 16. Wie verwende ich std :: bind(), um die Version der Basisklasse einer virtuellen Funktion aufzurufen?
- 17. Abgeleitete Klassen als Klassen Konstruktorparameter
- 18. DECLSPEC_NOVTABLE auf reinen virtuellen Klassen?
- 19. Haben Klassen, die als Objekt serialisiert sind, ihre Typinformationen verloren?
- 20. Smart Pointer und abgeleitete Klassen
- 21. Aufrufen einer Funktion, die unter der aktuellen Funktion deklariert wird
- 22. Abgeleitete System.Data-Klassen
- 23. Gegossene abgeleitete Klasse zur Basis
- 24. Kann ich abgeleitete Klassen, die geschützte Methoden in der Basis aufrufen, eine Erweiterungsmethode hinzufügen?
- 25. Unterschied zwischen einer virtuellen Funktion und einer rein virtuellen Funktion
- 26. Wie kann eine (Firefox) WebExtension ihre eigene Version kennen?
- 27. Wie überschreiben Stile einer Bibliothek, die ihre eigene Aktivität hat
- 28. Make Unterklasse hat ihre eigene Klasse Attribut
- 29. Haben eingebaute Java-Klassen wie hashmap jemals ihre serialVersionUID?
- 30. Template Operation auf Basis-Funktion
Mögliches Duplikat von [reine virtuelle Funktion mit Implementierung] (http://stackoverflow.com/questions/2089083/pure-virtual-function-with-implementation) – gsamaras
Fragen Sie, ob Ihr Compiler mit der Annahme Ihres Codes standardskonform ist ? – juanchopanza