Ich habe meine Hauptfrage im Titel gestellt. Ich wiederhole es nicht. (TROCKEN: D)
Bearbeiten: Beispiel:
Iteratoren sind reine Abstraktionen: Alles, was sich wie ein Iterator ist ein Iterator.
Was heißt das?
Eine abstrakte Klasse hat mindestens eine reine virtuelle Funktion. Dies ist Standard C ++ Terminologie.
Manche Leute verwenden den Begriff reine abstrakte Klasse , um eine Klasse zu beschreiben, die rein virtuelle Funktionen hat (also keine Datenelemente und keine konkreten Funktionen). Dies entspricht Java-Schnittstellen.
Nun zu Ihrer eigentlichen Frage:
Iteratoren sind reine Abstraktionen: Alles, was sich wie ein Iterator verhält, ist ein Iterator.
Das hat nichts mit abstrakten Klassen (rein oder anders) zu tun. Alles, was gesagt wird, ist, dass alles, was den Iterator-Vertrag erfüllt, ein Iterator ist. Es muss nicht einmal eine Klasse sein (think pointer).
Eine abstrakte Klasse ist eine Klasse mit einigen Funktionen, aber einige müssen implementiert werden, während eine reine abstrakte Klasse keine ihrer Funktionen implementiert hat.
Dies ist ein bisschen wie eine Schnittstelle in anderen Sprachen wie C # und Java.
Eine reine abstrakte Klasse würde dem Zweck dienen, einen "Vertrag" zu spezifizieren, an den sich die Konkretionen der reinen abstrakten Klasse halten müssen.
Ich würde denken, dass eine reine abstrakte Klasse das C ++ - Äquivalent einer Schnittstelle ist.
Siehe hier :
Eine reine abstrakte Klasse hat nur abstrakte Elementfunktionen und keine Daten oder konkrete Mitgliedsfunktionen. Im Allgemeinen ist eine reine abstrakte Klasse verwendet, um eine Schnittstelle zu definieren und soll vererbt werden konkrete Klassen. Es ist eine Möglichkeit, einen Vertrag zwischen der Klasse zu erzwingen Designer und die Benutzer dieser Klasse. Die Benutzer dieser Klasse müssen Deklarieren Sie eine übereinstimmende Elementfunktion für die zu kompilierende Klasse.
Abstrakte Klasse * hat mindestens eine reine virtuelle Funktion und kann Datenelemente haben.
Pure Abstract Class ist genau wie eine Schnittstelle . Hier können nur reine virtuelle Funktionen definiert werden. Hier können keine Datenelemente oder Methodendefinitionen vorgenommen werden.
Weitere Informationen finden Sie unter: ( Ссылка )
In C ++ gibt es keine reine abstrakte Klasse. Es gibt nur abstrakte Klasse und reine virtuelle Funktion (Funktion wurde mit = 0 markiert). Klasse mit mindestens einer reinen virtuellen Funktion wird abstrakt. Die reine virtuelle Funktion kann jedoch implementiert werden.
In Ihrem Beispiel sprechen Sie von Iteratoren . In C ++ und genauer in der Standardbibliothek bezieht sich der Begriff Iteratoren nicht auf eine reine abstrakte Klasse, sondern auf sogenannte Konzepte . Konzepte werden eher mit Vorlagen als mit virtuellem / vererbungsbasierten Polymorphismus verwendet. Gegenwärtig (C ++ 11) sind Konzepte nur in der Bibliotheksdokumentation definiert, d.h. sie existieren (noch) nicht als Teil der C ++ - Sprache selbst. Die Standardbibliothek dokumentiert Konzepte, zB das "Iterator" -Konzept, als eine Menge von Anforderungen für beliebige Typen / Objekte, die als Typparameter einer Vorlage akzeptiert werden, die mit einem "Iterator" arbeiten wollen. . Ein Satz von Anforderungen wird definiert in Bezug darauf, welche Ausdrücke unabhängig von ihrem Typ für ein Objekt gültig sind. Es ist eine Form der Entenschrift. Zum Beispiel: Ссылка
Tags und Links c++ oop abstract-class abstraction