Błąd nie może utworzyć instancji klasy abstrakcyjnej

Błąd nie może utworzyć instancji klasy abstrakcyjnej
Ten artykuł dotyczy kolejnego błędu, który często występuje, gdy pracujemy z klasami abstrakcyjnymi w naszym kodzie. Zbadajmy koncepcję klas abstrakcyjnych w programowaniu zorientowanym na obiekty. Klasa, która nie może mieć żadnych obiektów utworzonych od siebie, jest znana jako klasa abstrakcyjna. Jest również nazywany interfejsem w języku C ++. Każda klasa może być abstrakcyjna w języku C ++, deklarując w niej czystą funkcję wirtualną. Aby zadeklarować funkcję wirtualną, musimy umieścić „= 0” po funkcji. Klasa abstrakcyjna działa jako klasa rodzica lub podstawowa, z której pochodzą wszystkie inne klasy dzieci. Aby uzyskać dostęp do klasy abstrakcyjnej, musimy odziedziczyć ją po klasach podstawowych. Kiedy próbujemy ulepszyć klasę abstrakcyjną, otrzymujemy błąd kompilacji.

Składnia

Komunikat o błędzie naszego błędu jest następujący:

Błąd: nie może zadeklarować zmiennej „być typu abstrakcyjnym”

Zauważ, że w pustym nawiasie będą istnieć nazwy klas zmiennych i abstrakcyjnych.

Błąd C2259: „Stan”: Nie można tworzyć instancji klasy abstrakcyjnej

To kolejna wiadomość, którą otrzymujemy od kompilatora, gdy napotykamy taki błąd.

Przykład nr 01:

Aby ten błąd był zrozumiały, wykonamy przykład, w którym napiszemy nasz kod w taki sposób, że otrzymamy błąd. W tym celu zainicjowaliśmy klasę o nazwie „Shapeclass”. Aby uczynić tę klasę abstrakcyjną, zadeklarowaliśmy w niej funkcję wirtualną o nazwie „getarea”. Zadeklarowaliśmy również dwie inne funkcje odpowiednio z nazwami „setWidth” i „Setheight”. Chcemy tutaj zrobić to, że chcemy uzyskać wysokość jako parametr i szerokość jako parametr wejściowy. Będziemy obliczać obszar za pomocą naszych parametrów wejściowych. Stworzyliśmy instancję naszej klasy w głównej metodzie. Za pomocą tego obiektu nazwaliśmy metody i przekazamy parametry wejściowe przez te metody. Następnie wydrukowaliśmy nasze wyjście, aby sprawdzić wyniki.

#włączać
za pomocą przestrzeni nazw Std;
klasa Shapeclass

publiczny:
Virtual int getarea () = 0;
void setWidth (int w)

szerokość = w;

Void Setheight (int H)

wysokość = h;

chroniony:
int szerokość;
int wzrost;
;
int Main (void)

Shapeclasssh;
cii.setWidth (1);
cii.Setheight (2);
Cout<< "Total Rectangle area: " <powrót 0;

System dał nam błąd po wykonaniu naszego kodu. Komunikat o błędzie mówi, że nie możemy zadeklarować zmiennej „sh” jako typu abstrakcyjnego „Shapeclass”. Teraz kompilator próbuje przekazać, że „klaska” jest typem abstrakcyjnym i nie możemy zadeklarować jego zmiennej. Tak więc, dzięki wiadomości, możemy wyraźnie zrozumieć, że kompilator nie pozwala nam utworzyć instancji naszej klasy abstrakcyjnej, dlatego system daje nam błąd.

Aby rozwiązać błąd, zadeklarowaliśmy inną klasę „prostokąt”. Ta klasa będzie klasą dziecięcej naszej klasy abstrakcyjnej i będziemy deklarować ciało naszej wirtualnej funkcji w tej klasie. Następnie utworzymy jego obiekt w głównej metodzie i przy pomocy jego obiektu wywołamy funkcje.

Po poprawkach dokonaliśmy naszego kodu i teraz udało nam się uruchomić nasz kod. System wykonał nasz kod bez błędów. Na wyjściu widzimy, że system obliczył obszar prostokąta i wydrukował wyjście. Dowiedzieliśmy się, że naszym błędem było to, że bezpośrednio nazywamy obiekt naszej klasy abstrakcyjnej, co było niewłaściwym podejściem. Kiedy nazywaliśmy obiekt jego klasy dziecięcej, nasz kod zaczął działać dobrze.

Przykład nr 02:

W tym przykładzie nie będziemy wykonywać żadnych obliczeń matematycznych. Ten przykład jest ogólnym przykładem, który pomoże nam zrozumieć klasy abstrakcyjne i sposób, w jaki kompilator działa między metodami i klasami podczas wykonywania kodu. W tej klasie stworzyliśmy klasę abstrakcyjną i nazwaliśmy ją „Abclass”. Oświadczyliśmy inną klasę „klasą dziecięcą”, ale ta nie jest klasą abstrakcyjną. Ta klasa pochodzi z naszej klasy abstrakcyjnej.

Wydrukowaliśmy „Wartość przekazana za pomocą obiektu” w metodzie zadeklarowanej w klasie abstrakcyjnej. Nazwa funkcji to „valuefunc”. Jak omówiliśmy, ciało funkcji wirtualnej jest zadeklarowane w klasie dzieci. W naszej klasie dziecięcej wydrukowaliśmy „w funkcji wirtualnej” w naszym ciele funkcji wirtualnej. Teraz przekazamy wartość do naszej funkcji wartości i zobaczymy, czy osiągnięta wartość jest poprawna. W naszej głównej metodzie stworzyliśmy instancję naszej klasy abstrakcyjnej i przy pomocy instancji wywołamy nasze funkcje wirtualne i inne. Teraz wykonamy nasz kod.

#włączać
za pomocą przestrzeni nazw Std;
klasa absklasa

publiczny:
Virtual int virtfunc () = 0;
void valuefunc (int w)

szerokość = w;
Cout<<"Value passed using Object"<
chroniony:
int szerokość;
;
klasowa klasa dziecięca:
publiczna wałówka

publiczny:
int virtfunc ()
Cout<<"In Virtual Function"<
;
int Main (void)

Childclass CC;
CC.valueFunc (5);
Cout<powrót 0;

Po wykonaniu naszego kodu otrzymamy błąd. Ten błąd jest w zasadzie, że nie możemy utworzyć instancji klasy abstrakcyjnej, którą staramy się tutaj zrobić w naszej głównej metodzie. Należy zwrócić uwagę na to, że zmienna i typ abstrakcyjny w naszej wiadomości zostały zmienione.

Teraz spróbujemy usunąć nasz błąd i wykonać nasz kod. W tym celu stworzymy obiekt naszej klasy dzieci i postąpimy jej instancję. Z pomocą tego instancji nazwiemy zarówno wirtualną, jak i inną metodą w naszej klasie abstrakcyjnej. Będzie również obserwowane, czy możemy uzyskać dostęp do funkcji wirtualnej za pomocą klasy dzieci, czy nie. Jeśli uda nam się to zrobić, możemy powiedzieć, że uzyskaliśmy dostęp do klasy abstrakcyjnej za pomocą jej pochodnej klasy.

Po wykonaniu naszego kodu kompilator tym razem nie rzucił żadnego błędu. Zamiast tego system pomyślnie skompilował nasz kod i dał nam wyjście. Teraz spójrzmy na wyjście. System wydrukował „wartość przekazana za pomocą obiektu” i „5” na nim. Ponieważ przeszliśmy 5 za pomocą naszej instancji w głównej metodzie. Następnie wydrukował linię, o którą poprosiliśmy o to w naszej wirtualnej funkcji.

Wniosek

W tym przewodniku omówiliśmy błędy krytyczne, które napotykają programiści podczas kodowania i ćwiczenia pojęć obiektowych. Tego rodzaju błędy często występują, gdy programista ma do czynienia z klasami abstrakcyjnymi. Cały artykuł podsumowuje, że klasy abstrakcyjne nie mogą być utworzone i nie możemy sprawić, by ich obiekty wywołują metody. Wypróbowaliśmy również różne przykłady, aby utworzyć błędy, a następnie rozwiązaliśmy błędy w naszym kodzie.