L'errore non può istanziare la classe astratta

L'errore non può istanziare la classe astratta
Questo articolo parla di un altro errore che si verifica spesso quando stiamo lavorando con le classi astratte nel nostro codice. Studiamo il concetto di classi astratte nella programmazione orientata agli oggetti. Una classe che non può avere oggetti creati da se stessa è conosciuta come una classe astratta. Si chiama anche interfaccia in linguaggio C ++. Qualsiasi classe può essere resa astratta nel linguaggio C ++ dichiarando una funzione virtuale pura in essa. Per dichiarare una funzione virtuale, dobbiamo posizionare "= 0" dopo la funzione. La classe astratta funge da genitore o classe base da cui derivano tutte le altre classi di figli. Quindi, per accedere alla classe astratta, dobbiamo ereditare dalle sue classi di base. Quando proviamo ad istanziare una classe astratta, otteniamo un errore di compilation.

Sintassi

Il messaggio di errore del nostro errore è il seguente:

Errore: Impossibile dichiarare la variabile "essere di tipo astratto"

Si noti che nella parentesi vuota, ci saranno nomi di classi variabili e astratti.

Errore C2259: "Stato": Impossibile istanziare la classe astratta

Questo è un altro messaggio che riceviamo dal compilatore quando incontriamo un tale errore.

Esempio # 01:

Per rendere comprensibile questo errore, eseguiremo un esempio in cui scriveremo il nostro codice in modo tale da ottenere un errore. A tale scopo, abbiamo inizializzato una classe con il nome "ShapeClass". Per rendere astratto questa classe, abbiamo dichiarato una funzione virtuale con il nome "GetArea". Abbiamo dichiarato altre due funzioni anche con i nomi rispettivamente "setwidth" e "setheight". Quello che vogliamo fare qui è che vogliamo ottenere l'altezza come parametro e larghezza come parametro di input. Calculeremo l'area con l'aiuto dei nostri parametri di input. Abbiamo creato un'istanza della nostra classe nel metodo principale. Con l'aiuto di quell'oggetto, abbiamo chiamato i metodi e passeremo i parametri di input attraverso quei metodi. Successivamente, abbiamo stampato il nostro output per controllare i risultati.

#includere
Utilizzo dello spazio dei nomi std;
Shelleclass di classe

pubblico:
virtual int getArea () = 0;
void setwidth (int w)

larghezza = w;

void setheight (int h)

altezza = h;

protetto:
int larghezza;
Altezza int;
;
int main (vuoto)

ShapeClasssh;
sh.setwidth (1);
sh.Setheight (2);
cout<< "Total Rectangle area: " <restituzione 0;

Il sistema ci ha dato un errore dopo l'esecuzione del nostro codice. Il messaggio di errore dice che non possiamo dichiarare la variabile "sh" di tipo astratto "shapeclass". Ora, il compilatore sta cercando di comunicare che "ShapeClass" è un tipo astratto e non possiamo dichiarare la sua variabile. Quindi, con il messaggio, possiamo capire chiaramente che il compilatore non ci consente di istanziare la nostra classe astratta ed è per questo che il sistema ci sta dando l'errore.

Per risolvere l'errore, abbiamo dichiarato un'altra classe "rettangolo". Questa classe sarà la classe bambino della nostra classe astratta e dichiareremo il corpo della nostra funzione virtuale in questa classe. Dopodiché, creeremo il suo oggetto nel metodo principale e con l'aiuto del suo oggetto, chiameremo le funzioni.

Dopo gli emendamenti, abbiamo apportato il nostro codice e ora abbiamo avuto successo nell'esecuzione del nostro codice. Il sistema ha eseguito il nostro codice senza dare errori. Nell'output possiamo vedere che il sistema ha calcolato l'area di un rettangolo e stampato l'uscita. Abbiamo imparato che il nostro errore era che stavamo chiamando direttamente l'oggetto della nostra classe astratta che era l'approccio sbagliato. Quando abbiamo chiamato l'oggetto della sua classe figlio, il nostro codice ha iniziato a funzionare bene.

Esempio # 02:

In questo esempio, non faremo alcun calcolo matematico. Questo esempio è un esempio generico che ci aiuterà a comprendere le classi astratte e come il compilatore funziona tra i metodi e le classi durante l'esecuzione del codice. In questa classe, abbiamo creato una classe astratta e denominata "assicio". Abbiamo dichiarato un'altra classe "ChildClass" ma questa non è una classe astratta. Questa classe deriva dalla nostra classe astratta.

Abbiamo stampato "Valore Passato usando l'oggetto" in un metodo dichiarato nella classe astratta. Il nome della funzione è "ValueFunc". Come abbiamo discusso, il corpo della funzione virtuale è dichiarato nella classe infantile. Nella nostra classe figlio, abbiamo stampato "in funzione virtuale" nel nostro corpo di funzione virtuale. Ora passeremo un valore alla nostra funzione del valore e vedremo se il valore raggiunto è corretto. Nel nostro metodo principale, abbiamo creato un'istanza della nostra classe astratta e con l'aiuto dell'istanza, chiameremo le nostre funzioni virtuali e di altro tipo. Ora eseguiremo il nostro codice.

#includere
Utilizzo dello spazio dei nomi std;
Classe Assiculazione

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

larghezza = w;
cout<<"Value passed using Object"<
protetto:
int larghezza;
;
Class Class Class:
Assiculazione pubblica

pubblico:
int virtfunc ()
cout<<"In Virtual Function"<
;
int main (vuoto)

Child Class CC;
cc.ValueFunc (5);
cout<restituzione 0;

Dopo l'esecuzione del nostro codice, riceveremo un errore. Questo errore è fondamentalmente che non possiamo istanziare una classe astratta che stiamo cercando di fare qui nel nostro metodo principale. Una cosa da notare qui è che il tipo variabile e astratto nel nostro messaggio è stato modificato.

Ora cercheremo di rimuovere il nostro errore ed eseguire il nostro codice. A tale scopo, creeremo l'oggetto della nostra classe figlio e faremo l'istanza. Con l'aiuto di tale istanza, chiameremo sia il metodo virtuale che un altro metodo nella nostra classe astratta. Sarà anche osservato se possiamo accedere alla funzione virtuale usando la classe figlio o no. Se abbiamo successo nel farlo, possiamo dire che abbiamo acceduto alla classe astratta usando la sua classe derivata.

All'esecuzione del nostro codice, il compilatore non ha lanciato alcun errore questa volta. Invece, il sistema ha compilato il nostro codice correttamente e ci ha dato l'output. Ora, diamo un'occhiata all'output. Il sistema ha stampato "Valore Passato usando l'oggetto" e "5" contro di esso. Perché abbiamo superato 5 usando la nostra istanza nel metodo principale. Successivamente, ha stampato la linea a cui abbiamo chiesto nella nostra funzione virtuale.

Conclusione

In questa guida, abbiamo discusso degli errori critici che i programmatori incontrano durante la codifica e la pratica dei concetti orientati agli oggetti. Questi tipi di errori si verificano spesso quando un programmatore ha a che fare con classi astratte. L'intero articolo riassume che le classi astratte non possono essere istanziate e non possiamo far sì che i loro oggetti chiamassero metodi. Abbiamo anche provato diversi esempi per creare errori e quindi risolto gli errori nel nostro codice.