2017-07-21 15 views
0

Ich bin gerade dabei, "Die C++ Programmiersprache 4. Ausgabe" zu lesen, und ich bin an den Punkt gelangt, an dem Bjarne versucht, konkrete Klassen zu erklären. Seine Erklärung verwirrt mich, und ich kann online keine Erklärung finden, die mich befriedigt. Ich verstehe, dass abstrakte Klassen Klassen sind, die mindestens eine virtuelle Funktion haben und dass konkrete Klassen das Gegenteil sind, aber ich kann mich nicht um konkrete Klassen kümmern. Das Buch "Programming Principles and Practice Using C++" besagt, dass eine konkrete Klasse im Wesentlichen eine abgeleitete Klasse und eine abstrakte Klasse eine Basisklasse ist. Ist das die richtige Interpretation? Ich habe den ganzen Tag versucht, dieses Konzept herauszufinden. Auch "eine Klasse, die zum Erstellen von Objekten verwendet werden kann, ist eine konkrete Klasse". Bedeutet das, dass eine Klasse konkret ist, wenn ich etwas wie "myclass classobject1;" machen kann und ich keine Objekte mit abstrakten Klassen erstellen kann?Was ist eine konkrete Klasse in C++?

+3

Diese (https://stackoverflow.com/questions/2149207/what-ist-die-difference-between-a-concrete-class-and-an-abstract-class) Hilfe? – user4581301

+0

@Ramon Ich habe diese Frage auch schon gesehen. Nach dem erneuten Lesen erhält ich aus der Antwort, dass eine konkrete Klasse eine Klasse ist, die von einer abstrakten Klasse geerbt hat und ihre virtuellen Funktionen nutzt. Ist das richtig? –

+0

Eine konkrete Klasse ist eine Klasse, die nicht abstrakt ist. Es kann instanziiert werden. –

Antwort

1

Im Wesentlichen ist eine konkrete Klasse eine Klasse, die eine Schnittstelle implementiert. Eine Schnittstelle, z. B. eine abstrakte Klasse, definiert, wie Sie mit einer Instanz interagieren können, die diese Schnittstelle implementiert. Sie interagieren mit einer Instanz über Memberfunktionen. Daher deklariert eine Schnittstelle normalerweise virtuelle Memberfunktionen, die von einer implementierenden Klasse (konkrete Klasse) überschrieben (implementiert) werden sollen. Wenn ich eine abstrakte Klasse Animal habe, könnte es eine virtuelle Elementfunktion namens speak haben. Alle Tiere erzeugen unterschiedliche Geräusche, so dass die Schnittstelle Animal nicht weiß, wie diese Funktion definiert wird. Es ist Aufgabe der konkreten Klassen wie Dog oder Tiger, zu definieren, was tatsächlich passiert, wenn die Funktion speak aufgerufen wird.

+0

Also im Grunde wäre die abstrakte Klasse die Basisklasse, die die virtuellen Funktionen hat, und die abgeleitete Klasse, die tatsächlich die Funktionen der virtuellen Funktionen gibt, ist die konkrete Klasse? –

+0

Während ich dieses Szenario als Beispiel verwendet habe, muss eine konkrete Klasse nicht unbedingt von einer abstrakten Klasse abgeleitet werden. Es ist einfach eine Klasse, die das Verhalten ihrer Mitgliedsfunktionen (Schnittstelle) vollständig definiert. –

Verwandte Themen