Fehler: Die abstrakte Klasse kann nicht instanziiert werden

Fehler Die Abstrakte Klasse Kann Nicht Instanziiert Werden



In diesem Artikel geht es um einen weiteren Fehler, der häufig auftritt, wenn wir in unserem Code mit abstrakten Klassen arbeiten. Lassen Sie uns das Konzept abstrakter Klassen in der objektorientierten Programmierung untersuchen. Eine Klasse, aus der keine Objekte erstellt werden können, wird als abstrakte Klasse bezeichnet. In der C++-Sprache wird es auch Schnittstelle genannt. Jede Klasse kann in der Sprache C++ abstrakt gemacht werden, indem eine rein virtuelle Funktion darin deklariert wird. Um eine virtuelle Funktion zu deklarieren, müssen wir „=0“ nach der Funktion setzen. Die abstrakte Klasse fungiert als übergeordnete oder Basisklasse, von der alle anderen untergeordneten Klassen abgeleitet werden. Um also auf die abstrakte Klasse zugreifen zu können, müssen wir sie von ihren Basisklassen erben. Wenn wir versuchen, eine abstrakte Klasse zu instanziieren, erhalten wir einen Kompilierungsfehler.

Syntax

Die Fehlermeldung unseres Fehlers lautet wie folgt:

Error : kann die Variable „ “ nicht als abstrakten Typ „“ deklarieren

Beachten Sie, dass in leeren Klammern Namen von Variablen und abstrakten Klassen stehen.







Fehler C2259 : 'Bundesland' : abstrakte Klasse kann nicht instanziiert werden

Dies ist eine weitere Meldung, die wir vom Compiler erhalten, wenn wir auf einen solchen Fehler stoßen.



Beispiel # 01:

Um diesen Fehler verständlich zu machen, führen wir ein Beispiel durch, in dem wir unseren Code so schreiben, dass wir einen Fehler erhalten. Dazu haben wir eine Klasse mit dem Namen „ShapeClass“ initialisiert. Um diese Klasse abstrahieren zu können, haben wir darin eine virtuelle Funktion mit dem Namen „getArea“ deklariert. Wir haben zwei weitere Funktionen mit den Namen „setWidth“ bzw. „setHeight“ deklariert. Was wir hier tun möchten, ist, dass wir die Höhe als Parameter und die Breite als Eingabeparameter erhalten möchten. Wir werden die Fläche 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 werden die Eingabeparameter durch diese Methoden übergeben. Danach haben wir unsere Ausgabe gedruckt, um die Ergebnisse zu überprüfen.



#include

mit Namensraum std ;
Klasse ShapeClass
{
Öffentlichkeit :
virtuell int Getaria ( ) = 0 ;
Leere setBreite ( int in )
{
Breite = in ;
}
Leere setHöhe ( int h )
{
Höhe = h ;
}
geschützt :
int Breite ;
int Höhe ;
} ;
int hauptsächlich ( Leere )
{
ShapeClasssch ;
Sch. setBreite ( 1 ) ;
Sch. setHöhe ( zwei ) ;
cout << 'Gesamtfläche des Rechtecks: ' << Sch. Getaria ( ) << Ende ;
Rückkehr 0 ;
}

Das System hat uns nach der Ausführung unseres Codes einen Fehler angezeigt. Die Fehlermeldung besagt, dass wir die Variable „sh“ nicht als abstrakten Typ „shapeclass“ deklarieren können. Jetzt versucht der Compiler zu vermitteln, dass „ShapeClass“ ein abstrakter Typ ist und wir seine Variable nicht deklarieren können. Mit der Nachricht können wir also klar verstehen, dass der Compiler uns unsere abstrakte Klasse nicht instanziieren lässt, weshalb uns das System den Fehler gibt.





Um den Fehler zu beheben, haben wir eine andere Klasse „Rectangle“ deklariert. Diese Klasse wird die untergeordnete Klasse unserer abstrakten Klasse sein, und wir werden den Körper unserer virtuellen Funktion in dieser Klasse deklarieren. Danach erstellen wir sein Objekt in der Hauptmethode und rufen mit Hilfe seines Objekts die Funktionen auf.



Nach den Änderungen haben wir unseren Code erstellt und konnten unseren Code nun erfolgreich ausführen. Das System hat unseren Code ohne Fehler ausgeführt. Wir können in der Ausgabe sehen, dass das System die Fläche eines Rechtecks ​​berechnet und die Ausgabe gedruckt hat. Wir haben gelernt, dass unser Fehler darin bestand, dass wir das Objekt unserer abstrakten Klasse direkt aufgerufen haben, was der falsche Ansatz war. Als wir das Objekt seiner untergeordneten Klasse aufgerufen haben, funktionierte unser Code einwandfrei.

Beispiel # 02:

In diesem Beispiel führen wir keine mathematischen Berechnungen durch. 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 er den Code ausführt. In dieser Klasse haben wir eine abstrakte Klasse erstellt und sie „AbsClass“ genannt. Wir haben eine andere Klasse „ChildClass“ deklariert, aber diese ist keine abstrakte Klasse. Diese Klasse ist von unserer abstrakten Klasse abgeleitet.

Wir haben „Wert übergeben mit Objekt“ in einer Methode gedruckt, die in der abstrakten Klasse deklariert ist. Der Name der Funktion ist „valueFunc“. Wie wir besprochen haben, wird der Körper der virtuellen Funktion in der untergeordneten Klasse deklariert. In unserer untergeordneten Klasse haben wir „In virtueller Funktion“ in unseren virtuellen Funktionskörper gedruckt. Nun übergeben wir einen Wert an unsere Value-Funktion 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 aufrufen. Jetzt werden wir unseren Code ausführen.

#include

mit Namensraum std ;
Klasse AbsKlasse
{
Öffentlichkeit :
virtuell int VirtFunc ( ) = 0 ;
Leere WertFunk ( int in )
{
Breite = in ;
cout << 'Über Objekt übergebener Wert' << in << Ende ;
}
geschützt :
int Breite ;
} ;
Klasse Kinderklasse :
öffentliche AbsClass
{
Öffentlichkeit :
int VirtFunc ( ) {
cout << 'In virtueller Funktion' << Ende ;
}
} ;
int hauptsächlich ( Leere )
{
Kinderklasse cc ;
cc. WertFunk ( 5 ) ;
cout << cc. VirtFunc ( ) << Ende ;
Rückkehr 0 ;
}

Nach der Ausführung unseres Codes erhalten wir einen Fehler. Dieser Fehler besteht im Grunde darin, dass wir keine abstrakte Klasse instanziieren können, was wir hier in unserer Hauptmethode versuchen. 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 beheben und unseren Code auszuführen. Zu diesem Zweck erstellen wir das Objekt unserer untergeordneten Klasse und machen seine Instanz. Mit Hilfe dieser Instanz rufen wir sowohl die virtuelle als auch eine andere Methode in unserer abstrakten Klasse auf. Es wird auch beobachtet, ob wir über die Kindklasse auf die virtuelle Funktion zugreifen können oder nicht. Wenn uns das gelingt, können wir sagen, dass wir auf die abstrakte Klasse über ihre abgeleitete Klasse zugegriffen haben.

Bei der Ausführung unseres Codes hat der Compiler dieses Mal keinen Fehler ausgegeben. Stattdessen hat das System unseren Code erfolgreich kompiliert und uns die Ausgabe gegeben. Schauen wir uns nun die Ausgabe an. Das System hat „Wert übergeben mit Objekt“ und „5“ dagegen gedruckt. Weil wir 5 mit unserer Instanz in der Hauptmethode bestanden haben. Danach druckte es die Zeile, um die wir es gebeten hatten, in unserer virtuellen Funktion.

Fazit

In diesem Leitfaden haben wir kritische Fehler besprochen, auf die Programmierer beim Codieren und Üben objektorientierter Konzepte stoßen. Diese Arten von Fehlern treten häufig auf, wenn ein Programmierer mit abstrakten Klassen arbeitet. Der gesamte Artikel fasst zusammen, dass abstrakte Klassen nicht instanziiert werden können und wir ihre Objekte nicht dazu bringen können, Methoden darin aufzurufen. Wir haben auch verschiedene Beispiele ausprobiert, um Fehler zu erzeugen, und die Fehler dann in unserem Code behoben.