Fehler kann die abstrakte Klasse nicht instanziieren

Fehler kann die abstrakte Klasse nicht instanziieren
In diesem Artikel geht es um einen anderen Fehler, der häufig auftritt, wenn wir mit abstrakten Klassen in unserem Code arbeiten. Lassen Sie uns das Konzept der abstrakten Klassen in der objektorientierten Programmierung untersuchen. Eine Klasse, die keine Objekte aus sich selbst erstellen können, wird als abstrakte Klasse bekannt. Es wird auch als Schnittstelle in C ++ - Sprache bezeichnet. Jede Klasse kann in C ++ - Sprache abstrakt gemacht werden, indem eine reine virtuelle Funktion darin erklärt wird. Um eine virtuelle Funktion zu deklarieren, müssen wir nach der Funktion "= 0" platzieren. Abstrakte Klasse fungiert als Eltern- oder Basisklasse, von der alle anderen Kinderklassen abgeleitet sind. Um auf die abstrakte Klasse zuzugreifen, müssen wir sie von ihren Basisklassen aus erben. Wenn wir versuchen, eine abstrakte Klasse zu instanziieren, erhalten wir einen Kompilierungsfehler.

Syntax

Die Fehlermeldung unseres Fehlers lautet wie folgt:

Fehler: Die Variable kann nicht als abstrakter Typ deklarieren

Beachten Sie, dass es in leerer Klammern variable und abstrakte Klassennamen geben wird.

Fehler C2259: 'Status': Die abstrakte Klasse kann nicht instanziieren

Dies 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.

#enthalten
Verwenden von Namespace STD;
Klasse Shapeclass

öffentlich:
virtual int getArea () = 0;
Void Setwidth (int w)

Breite = w;

void Seteight (int H)

Höhe = H;

geschützt:
int Breite;
int Höhe;
;
int main (void)

Shapeclasssh;
Sch.Setwidth (1);
Sch.Seteight (2);
Cout<< "Total Rectangle area: " <Rückkehr 0;

Das 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.

#enthalten
Verwenden von Namespace STD;
Klasse Absclass

öffentlich:
virtual int virtfunc () = 0;
void ValueFunc (int w)

Breite = w;
Cout<<"Value passed using Object"<
geschützt:
int Breite;
;
Klassenkindklasse:
Öffentliche Absclass

öffentlich:
int virtfunc ()
Cout<<"In Virtual Function"<
;
int main (void)

Kinderklasse CC;
CC.ValueFunc (5);
Cout<Rückkehr 0;

Nach 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.