L'erreur ne peut pas instancier la classe abstraite

L'erreur ne peut pas instancier la classe abstraite
Cet article concerne une autre erreur qui se produit souvent lorsque nous travaillons avec des classes abstraites dans notre code. Étudions le concept de classes abstraites dans la programmation orientée objet. Une classe qui ne peut avoir aucun objet créé de lui-même est connue comme une classe abstraite. Il est également appelé interface dans la langue C ++. Toute classe peut être rendue abstraite dans la langue C ++ en lui déclarant une fonction virtuelle pure. Pour déclarer une fonction virtuelle, nous devons placer «= 0» après la fonction. La classe abstraite agit comme une classe de parent ou de base à partir de laquelle toutes les autres classes enfants sont dérivées. Donc, pour accéder à la classe abstraite, nous devons l'hériter de ses classes de base. Lorsque nous essayons d'instancier une classe abstraite, nous obtenons une erreur de compilation.

Syntaxe

Le message d'erreur de notre erreur est le suivant:

Erreur: Impossible de déclarer la variable "être de type abstrait"

Notez que dans les parenthèses vides, il y aura des noms de classe variables et abstraits.

Erreur C2259: «État»: Impossible d'instancier la classe abstraite

Ceci est un autre message que nous recevons du compilateur lorsque nous rencontrons une telle erreur.

Exemple # 01:

Pour rendre cette erreur compréhensible, nous effectuerons un exemple dans lequel nous écrirons notre code de telle manière que nous obtenons une erreur. À cette fin, nous avons initialisé une classe avec le nom «Shapeclass». Pour rendre cette classe abstraite, nous avons déclaré une fonction virtuelle avec le nom «getarea». Nous avons également déclaré deux autres fonctions avec les noms «SetWidth» et «Setheight» respectivement. Ce que nous voulons faire ici, c'est que nous voulons obtenir la hauteur en tant que paramètre et largeur comme paramètre d'entrée. Nous allons calculer la zone à l'aide de nos paramètres d'entrée. Nous avons créé une instance de notre classe dans la méthode principale. À l'aide de cet objet, nous avons appelé les méthodes et nous passerons les paramètres d'entrée via ces méthodes. Après cela, nous avons imprimé notre sortie pour vérifier les résultats.

#inclure
Utilisation de Namespace Std;
Classe Shapeclass

public:
virtual int getarea () = 0;
void SetWidth (int w)

largeur = w;

void Setheight (int h)

hauteur = h;

protégé:
Largeur int;
Hauteur int;
;
int Main (vide)

ShapECLassSh;
shot.SetWidth (1);
shot.Setheight (2);
couter<< "Total Rectangle area: " <retour 0;

Le système nous a donné une erreur après l'exécution de notre code. Le message d'erreur indique que nous ne pouvons pas déclarer la variable «sh» comme de type abstrait «Shapeclass». Maintenant, le compilateur essaie de transmettre que «Shapeclass» est un type abstrait et nous ne pouvons pas déclarer sa variable. Donc, avec le message, nous pouvons clairement comprendre que le compilateur ne nous laisse pas instancier notre classe abstraite, c'est pourquoi le système nous donne l'erreur.

Pour résoudre l'erreur, nous avons déclaré un autre «rectangle» de classe. Cette classe sera la classe d'enfants de notre classe abstraite et nous déclarerons le corps de notre fonction virtuelle dans cette classe. Après cela, nous créerons son objet dans la méthode principale et avec l'aide de son objet, nous appellerons les fonctions.

Après les modifications, nous avons fait notre code et nous avons maintenant réussi à exécuter notre code. Le système a exécuté notre code sans donner d'erreurs. Nous pouvons voir dans la sortie que le système a calculé la zone d'un rectangle et imprimé la sortie. Nous avons appris que notre erreur était que nous appelions directement l'objet de notre classe abstraite qui était la mauvaise approche. Quand nous avons appelé l'objet de sa classe d'enfants, notre code a commencé à bien fonctionner.

Exemple # 02:

Dans cet exemple, nous ne ferons aucun calcul mathématique. Cet exemple est un exemple générique qui nous aidera à comprendre les classes abstraites et comment le compilateur s'exécute entre les méthodes et les classes lors de l'exécution du code. Dans cette classe, nous avons créé une classe abstraite et l'avons nommée «Absclass». Nous avons déclaré une autre classe de «classe d'enfants» mais celle-ci n'est pas une classe abstraite. Cette classe est dérivée de notre classe abstraite.

Nous avons imprimé la «valeur passée à l'aide d'un objet» dans une méthode déclarée dans la classe abstraite. Le nom de la fonction est «ValueFunc». Comme nous l'avons discuté, le corps de la fonction virtuelle est déclaré dans la classe enfant. Dans notre classe d'enfants, nous avons imprimé «en fonction virtuelle» dans notre corps de fonction virtuelle. Maintenant, nous allons passer une valeur à notre fonction de valeur et voir si la valeur atteinte est correcte. Dans notre méthode principale, nous avons créé une instance de notre classe abstraite et avec l'aide de l'instance, nous appellerons nos fonctions virtuelles et autres. Maintenant, nous allons exécuter notre code.

#inclure
Utilisation de Namespace Std;
Classe Absclass

public:
virtual int verfunc () = 0;
void ValueFunc (int w)

largeur = w;
couter<<"Value passed using Object"<
protégé:
Largeur int;
;
classe d'enfants de classe:
Absclasse publique

public:
int verfunc ()
couter<<"In Virtual Function"<
;
int Main (vide)

CC de classe d'enfants;
CC.ValueFunc (5);
couter<retour 0;

Après l'exécution de notre code, nous obtiendrons une erreur. Cette erreur est essentiellement que nous ne pouvons pas instancier une classe abstraite que nous essayons de faire ici dans notre méthode principale. Une chose à noter ici est que le type variable et abstrait de notre message a été modifié.

Maintenant, nous allons essayer de supprimer notre erreur et d'exécuter notre code. À cette fin, nous créerons l'objet de notre classe d'enfants et ferons son instance. Avec l'aide de cette instance, nous appellerons à la fois la méthode virtuelle et une autre méthode de notre classe abstraite. On observera également si nous pouvons accéder à la fonction virtuelle en utilisant la classe infantile ou non. Si nous réussissons à le faire, nous pouvons dire que nous avons accédé à la classe abstraite en utilisant sa classe dérivée.

Lors de l'exécution de notre code, le compilateur n'a pas lancé aucune erreur cette fois. Au lieu de cela, le système a compilé notre code avec succès et nous a donné la sortie. Maintenant, jetons un coup d'œil à la sortie. Le système a imprimé la «valeur passée à l'aide de l'objet» et «5» contre elle. Parce que nous avons passé 5 en utilisant notre instance dans la méthode principale. Après cela, il a imprimé la ligne que nous lui avons demandé dans notre fonction virtuelle.

Conclusion

Dans ce guide, nous avons discuté de la rencontre des programmeurs d'erreurs critiques tout en codant et en pratiquant des concepts orientés objet. Ces types d'erreurs se produisent souvent lorsqu'un programmeur traite des classes abstraites. L'article entier résume que les classes abstraites ne peuvent pas être instanciées, et nous ne pouvons pas y faire des méthodes d'appel d'objets. Nous avons également essayé différents exemples pour créer des erreurs, puis nous avons résolu les erreurs de notre code.