Angenommen, ich habe ein Array von Basisklassenzeigern. Kann ich einen abgeleiteten Klassenobjektzeiger (abgeleitet von dieser Basisklasse) in diesem Array speichern? und kann ich das anders herum machen?Können abgeleitete Objektzeiger in einem Array von Basisklassenzeigern gespeichert werden?
Antwort
Kann ich einen abgeleiteten Klassenobjektzeiger (abgeleitet von dieser Basisklasse) in diesem Array speichern?
Ja.
und kann ich es anders herum tun?
Nr
Angenommen, Sie haben:
struct Base
{
};
struct Derived1 : Base
{
};
struct Derived2 : Base
{
};
std::vector<Derived1*> ptrs;
Base* bPtr = new Derived2;
ptrs.push_back(bPtr); // Not allowed.
// If it were, imagine the problems.
// You have a Derived2* in the guise of a Derived1*
Will I in der Lage sein, dies auch dann zu tun, wenn die abgeleitete Klasse zusätzliche öffentliche Funktionen hat? – Akra
Sie können. Sie können jedoch nicht über die Basisklassenzeiger auf die abgeleiteten Klassenmitglieder zugreifen. Um auf die abgeleiteten Klassenmitglieder zuzugreifen, müssen Sie den Zeiger zuerst auf den abgeleiteten Klassenzeiger zurückwerfen. –
Sie in der Tat ein Derived*
in einer Reihe von Base*
(oder einer anderen Datenstruktur von Base
Zeigern für diese Angelegenheit) speichern können.
Aber das Gegenteil ist nicht wahr, da es die Liskov Substitution Principle verletzt.
- 1. Limit-Daten (Größe) können in einem Javascript-Array gespeichert werden.
- 2. Können Objektzeiger zwischen CLR und nativem C++ übergeben werden?
- 3. Sitzungswerte können nicht gespeichert werden
- 4. Wo können Metadaten gespeichert werden?
- 5. Daten können nicht in Sitzung gespeichert werden
- 6. Wie können Objektbeziehungen in Lucene gespeichert werden?
- 7. Daten können nicht in Realm gespeichert werden
- 8. Wie hex Farben in einem Array gespeichert werden
- 9. Wie Peer-Verbindungen in Array gespeichert werden
- 10. Wie können ViewBag-Daten nach einem Formular-Post gespeichert werden?
- 11. Wie können VMware Fusion VMs gespeichert werden?
- 12. Servlets: Wo können hochgeladene Dateien gespeichert werden?
- 13. Dokumentenverwaltungssystem - Wo können Dateien gespeichert werden?
- 14. Wo können Delphi DCU-Dateien gespeichert werden?
- 15. Wie kann Array in CoreData gespeichert werden?
- 16. Wo können VAO-Attribute gespeichert werden?
- 17. Wie können mehrsprachige Daten gespeichert werden?
- 18. Aufruf Objektfunktion durch Objektzeiger
- 19. Wo können mobile Daten gespeichert werden (Großprojekt)?
- 20. Benutzereingabe in einem Array von Zeichen gespeichert (C++)
- 21. Aufruf überladener Operator() von Objektzeiger
- 22. SQLite-Updates werden nicht gespeichert oder können nicht ausgeführt werden
- 23. Wie können erweiterbare Metadaten in .NET ORM-freundlich gespeichert werden?
- 24. Wie können C-Bibliotheksabhängigkeiten in der Versionskontrolle gespeichert werden?
- 25. Warum funktioniert eine abgeleitete Klasse nicht in einem Array? (C++)
- 26. Wo können hochgeladene Dateien von Webanwendungen gespeichert werden?
- 27. Wie können Benutzer eingegebene Daten von einem dynamisch erstellten Steuerelement in den Sitzungszustand gespeichert werden?
- 28. Alle (Properties.Resources) in einem Verzeichnis gespeichert werden
- 29. Wie können lokale Variablen in jQuery-Klickfunktionen gespeichert werden?
- 30. Datenbankspeicherorte können nicht in SQL Server gespeichert werden
Warum machen Sie es nicht zu einer praktischen Frage, indem Sie Code bereitstellen? – user463035818
Weil es eine theoretische Frage von einer College-Prüfung ist und kein Code zur Verfügung gestellt wurde. – Akra
Ja, Sie können ein 'Derived *' in einem 'std :: vector ' speichern, aber nicht umgekehrt. –
ArchbishopOfBanterbury