Syntaks
Feilmeldingen til vår feil er som følger:
Feil: Kan ikke erklære variabelen "å være av abstrakt type"Merk at i tom parentes vil det være variable og abstrakte klassenavn.
Feil C2259: 'State': Kan ikke instantisere abstrakt klasseDette er en annen melding vi får fra kompilatoren når vi møter en slik feil.
Eksempel # 01:
For å gjøre denne feilen forståelig, vil vi utføre et eksempel der vi vil skrive koden vår på en slik måte at vi får en feil. For det formålet har vi initialisert en klasse med navnet "ShapeClass". For å gjøre denne klassen abstrakt, har vi erklært en virtuell funksjon i den med navnet "getarea". Vi har erklært to andre funksjoner i tillegg til navnene "Setwidth" og "Setheight". Det vi vil gjøre her er at vi ønsker å få høyde som parameter og bredde som inngangsparameter. Vi beregner området ved hjelp av våre inngangsparametere. Vi opprettet en forekomst av klassen vår i hovedmetoden. Ved hjelp av det objektet har vi kalt metodene, og vi vil passere inngangsparametrene gjennom disse metodene. Etter det trykket vi utdataene våre for å sjekke resultatene.
#inkludereSystemet ga oss en feil etter utførelsen av koden vår. Feilmeldingen sier at vi ikke kan erklære variabel 'sh' for å være av abstrakt type 'shapeclass'. Nå prøver kompilatoren å formidle at 'shapeclass' er en abstrakt type, og vi kan ikke erklære dens variabel. Så med meldingen kan vi tydelig forstå at kompilatoren ikke lar oss instantisere vår abstrakte klasse, det er grunnen til at systemet gir oss feilen.
For å løse feilen, erklærte vi en annen klasse 'rektangel'. Denne klassen vil være barneklassen i vår abstrakte klasse, og vi vil erklære kroppen for vår virtuelle funksjon i denne klassen. Etter det vil vi lage dets objekt i hovedmetoden, og ved hjelp av objektet vil vi kalle funksjonene.
Etter endringene har vi laget koden vår, og vi har nå lyktes med å kjøre koden vår. Systemet har utført koden vår uten å gi feil. Vi kan se i utgangen at systemet har beregnet området til et rektangel og skrevet ut utgangen. Vi har lært at feilen vår var at vi direkte kalte formålet med vår abstrakte klasse som var feil tilnærming. Da vi ringte formålet med barneklassen begynte koden vår bra.
Eksempel # 02:
I dette eksemplet vil vi ikke gjøre noen matematiske beregninger. Dette eksemplet er et generisk eksempel som vil hjelpe oss å forstå abstrakte klasser og hvordan kompilatoren kjører mellom metodene og klassene mens vi utfører koden. I denne klassen har vi laget en abstrakt klasse og kalt den "AbSclass". Vi har erklært en annen klasse “Childclass”, men denne er ikke en abstrakt klasse. Denne klassen er avledet fra vår abstrakte klasse.
Vi har skrevet ut "verdi bestått ved hjelp av objekt" i en metode som er erklært i den abstrakte klassen. Navnet på funksjonen er "ValueFunc". Som vi diskuterte, er den virtuelle funksjonens kropp erklært i barneklassen. I vår barneklasse har vi skrevet ut "i virtuell funksjon" i vår virtuelle funksjonskropp. Nå vil vi gi en verdi til vår verdifunksjon og se om verdien nådd er riktig. I vår viktigste metode har vi laget en forekomst av vår abstrakte klasse, og med hjelp av forekomsten vil vi kalle våre virtuelle og andre funksjoner. Nå vil vi utføre koden vår.
#inkludereEtter utførelsen av koden vår, vil vi få en feil. Denne feilen er i utgangspunktet at vi ikke kan instantisere en abstrakt klasse som vi prøver å gjøre her i hovedmetoden vår. En ting å merke seg her er at variabel og abstrakt type i meldingen vår er endret.
Nå vil vi prøve å fjerne feilen vår og utføre koden vår. For det formålet vil vi lage gjenstand for vår barneklasse og gjøre dets forekomst. Ved hjelp av det tilfellet vil vi kalle både den virtuelle og en annen metode i vår abstrakte klasse. Det vil også bli observert om vi får tilgang til den virtuelle funksjonen ved hjelp av barneklassen eller ikke. Hvis vi lykkes med å gjøre det, kan vi si at vi har fått tilgang til den abstrakte klassen ved hjelp av den avledede klassen.
Ved utførelse av koden vår har kompilatoren ikke kastet noen feil denne gangen. I stedet har systemet samlet koden vår med hell og gitt oss utgangen. La oss nå se på utdataene. Systemet har skrevet ut "verdien som er bestått ved hjelp av objekt" og "5" mot det. Fordi vi passerte 5 ved å bruke vår forekomst i hovedmetoden. Etter det trykket den linjen vi ba den til i vår virtuelle funksjon.
Konklusjon
I denne guiden diskuterte vi kritiske feilprogrammerere møte mens vi koder og praktiserer objektorienterte konsepter. Denne typen feil oppstår ofte når en programmerer har å gjøre med abstrakte klasser. Hele artikkelen oppsummerer at abstrakte klasser ikke kan instantieres, og vi kan ikke lage objektene deres til å ringe metoder i den. Vi prøvde også forskjellige eksempler for å lage feil og løste deretter feilene i koden vår.