Syntax
Die Fehlermeldung unseres Fehlers lautet wie folgt:
Fehler: Die Variable kann nicht als abstrakter Typ deklarierenBeachten Sie, dass es in leerer Klammern variable und abstrakte Klassennamen geben wird.
Fehler C2259: 'Status': Die abstrakte Klasse kann nicht instanziierenDies ist eine weitere Nachricht, die wir vom Compiler erhalten, wenn wir auf einen solchen Fehler stoßen.
Beispiel # 01:
Um diesen Fehler verständlich zu machen, werden wir ein Beispiel ausführen, in dem wir unseren Code so schreiben werden, dass wir einen Fehler erhalten. Zu diesem Zweck haben wir eine Klasse mit dem Namen „Shapeclass“ initialisiert. Um diese Klasse abstrakt zu machen, haben wir eine virtuelle Funktion mit dem Namen „GetArea“ deklariert. Wir haben auch zwei weitere Funktionen mit den Namen „Setwidth“ bzw. „Seteight“ deklariert. Was wir hier tun wollen, ist, dass wir als Parameter und Breite als Eingabeparameter Höhe erhalten wollen. Wir werden den Bereich mit Hilfe unserer Eingabeparameter berechnen. Wir haben eine Instanz unserer Klasse in der Hauptmethode erstellt. Mit Hilfe dieses Objekts haben wir die Methoden aufgerufen und die Eingabeparameter über diese Methoden übergeben. Danach druckten wir unsere Ausgabe, um die Ergebnisse zu überprüfen.
#enthaltenDas System gab uns einen Fehler nach der Ausführung unseres Code. In der Fehlermeldung heißt es, dass wir Variable 'SH' nicht als abstrakter Typ 'Shapeclass' deklarieren können. Jetzt versucht der Compiler zu vermitteln, dass "Shapeclass" ein abstrakter Typ ist, und wir können seine Variable nicht deklarieren. Mit der Nachricht können wir also klar verstehen, dass der Compiler uns nicht unsere abstrakte Klasse instanziieren lässt. Deshalb gibt uns das System den Fehler.
Um den Fehler zu beheben, haben wir eine andere Klasse "Rechteck" deklariert. Diese Klasse wird die untergeordnete Klasse unserer abstrakten Klasse sein und wir werden den Körper unserer virtuellen Funktion in dieser Klasse erklären. Danach werden wir sein Objekt in der Hauptmethode erstellen und mit Hilfe seines Objekts die Funktionen aufrufen.
Nach den Änderungen haben wir unseren Code erstellt und haben jetzt erfolgreich unseren Code ausgeführt. Das System hat unseren Code ausgeführt, ohne Fehler zu geben. Wir können in der Ausgabe sehen, dass das System die Fläche eines Rechtecks berechnet und die Ausgabe gedruckt hat. Wir haben erfahren, dass unser Fehler darin bestand, dass wir direkt das Objekt unserer abstrakten Klasse bezeichneten, was der falsche Ansatz war. Als wir das Objekt seiner Kinderklasse anrufen, begann unser Code gut zu funktionieren.
Beispiel # 02:
In diesem Beispiel werden wir keine mathematischen Berechnungen durchführen. Dieses Beispiel ist ein generisches Beispiel, das uns hilft, abstrakte Klassen zu verstehen und wie der Compiler zwischen den Methoden und Klassen läuft, während der Code ausgeführt wird. In dieser Klasse haben wir eine abstrakte Klasse erstellt und sie als „ABSCLASS“ bezeichnet. Wir haben eine andere Klasse als „Kinderklasse“ deklariert, aber dieser ist keine abstrakte Klasse. Diese Klasse stammt aus unserer abstrakten Klasse.
Wir haben in einer in der abstrakten Klasse deklarierte Methode „Wert übergeben mit Objekt“ gedruckt. Der Name der Funktion lautet "ValueFunc". Wie wir besprochen haben, wird der Körper der virtuellen Funktion in der Kinderklasse deklariert. In unserer Kinderklasse haben wir in unserer virtuellen Funktion "in virtueller Funktion" gedruckt. Jetzt übergeben wir einen Wert an unsere Wertfunktion und prüfen, ob der erreichte Wert korrekt ist. In unserer Hauptmethode haben wir eine Instanz unserer abstrakten Klasse erstellt und mit Hilfe der Instanz werden wir unsere virtuellen und anderen Funktionen nennen. Jetzt werden wir unseren Code ausführen.
#enthaltenNach der Ausführung unseres Code erhalten wir einen Fehler. Dieser Fehler ist im Grunde genommen, dass wir eine abstrakte Klasse nicht instanziieren können, die wir hier in unserer Hauptmethode tun möchten. Eine Sache, die hier zu beachten ist, ist, dass die Variable und der abstrakte Typ in unserer Nachricht geändert wurden.
Jetzt werden wir versuchen, unseren Fehler zu entfernen und unseren Code auszuführen. Zu diesem Zweck werden wir das Objekt unserer Kinderklasse erstellen und seine Instanz erstellen. Mit Hilfe dieser Instanz werden wir sowohl die virtuelle als auch eine andere Methode in unserer abstrakten Klasse nennen. Es wird auch beobachtet, ob wir mit der untergeordneten Klasse auf die virtuelle Funktion zugreifen können oder nicht. Wenn es uns erfolgreich ist, können wir sagen, dass wir mit seiner abgeleiteten Klasse auf die abstrakte Klasse zugegriffen haben.
Bei der Ausführung unseres Code hat der Compiler diesmal keinen Fehler geworfen. Stattdessen hat das System unseren Code erfolgreich zusammengestellt und uns die Ausgabe gegeben. Lassen Sie uns nun einen Blick auf die Ausgabe werfen. Das System hat "Wert mit Objekt" und "5" dagegen gedruckt. Weil wir 5 mit unserer Instanz in der Hauptmethode bestanden haben. Danach druckte es die Zeile, zu der wir sie in unserer virtuellen Funktion gebeten hatten.
Abschluss
In diesem Handbuch diskutierten wir kritische Fehler, die Programmierer begegnen, während wir objektorientierte Konzepte codierten und üben. Diese Art von Fehlern treten häufig auf, wenn ein Programmierer mit abstrakten Klassen zu tun hat. Der gesamte Artikel fasst zusammen, dass abstrakte Klassen nicht instanziiert werden können, und wir können ihre Objekte nicht dazu bringen, Methoden darin aufzurufen. Wir haben auch verschiedene Beispiele ausprobiert, um Fehler zu erstellen, und dann die Fehler in unserem Code behoben.