Klasa abstrakcyjna C ++ i czysta funkcja wirtualna

W tym samouczku nauczymy się abstrakcyjnych funkcji wirtualnych i klas abstrakcyjnych za pomocą przykładów.

Zanim dowiemy się o czystych funkcjach wirtualnych, zapoznaj się z tymi samouczkami:

  • Dziedziczenie w C ++
  • Funkcje wirtualne C ++

Funkcje wirtualne w C ++

Używane są czyste funkcje wirtualne

  • jeśli funkcja nie ma żadnego zastosowania w klasie bazowej
  • ale funkcja musi być implementowana przez wszystkie jej klasy pochodne

Weźmy przykład,

Załóżmy, że mamy pochodzą Triangle, Squarea Circlezajęcia z Shapeklasą, i chcemy obliczyć powierzchnię tych wszystkich kształtów.

W takim przypadku możemy stworzyć czystą funkcję wirtualną o nazwie calculateArea()w Shape. Ponieważ jest to funkcja czysto wirtualne, wszystkie klasy pochodne Triangle, Squarei Circlemusi zawierać calculateArea()funkcję z realizacji.

Czysta funkcja wirtualna nie ma treści funkcji i musi kończyć się na = 0. Na przykład,

 class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );

Uwaga:= 0 składnia nie znaczy, że są przypisywanie 0 do funkcji. Tak po prostu definiujemy czyste funkcje wirtualne.

Klasa abstrakcyjna

Klasa zawierająca czystą funkcję wirtualną jest nazywana klasą abstrakcyjną. W powyższym przykładzie klasa Shapejest klasą abstrakcyjną.

Nie możemy tworzyć obiektów klasy abstrakcyjnej. Możemy jednak wyprowadzać z nich klasy i używać ich składowych danych i funkcji składowych (z wyjątkiem czystych funkcji wirtualnych).

Przykład: Klasa abstrakcyjna C ++ i czysta funkcja wirtualna

 // C++ program to calculate the area of a square and a circle #include using namespace std; // Abstract class class Shape ( protected: float dimension; public: void getDimension() ( cin>> dimension; ) // pure virtual Function virtual float calculateArea() = 0; ); // Derived class class Square : public Shape ( public: float calculateArea() ( return dimension * dimension; ) ); // Derived class class Circle : public Shape ( public: float calculateArea() ( return 3.14 * dimension * dimension; ) ); int main() ( Square square; Circle circle; cout << "Enter the length of the square: "; square.getDimension(); cout << "Area of square: " << square.calculateArea() << endl; cout << "Enter radius of the circle: "; circle.getDimension(); cout << "Area of circle: " << circle.calculateArea() << endl; return 0; )

Wynik

 Podaj długość, aby obliczyć pole kwadratu: 4 Pole kwadratu: 16 Podaj promień, aby obliczyć pole koła: 5 Pole koła: 78,5

W tym programie virtual float calculateArea() = 0;wewnątrz Shapeklasy jest czysta funkcja wirtualna.

Dlatego musimy zapewnić implementację calculateArea()w obu naszych klasach pochodnych, inaczej otrzymamy błąd.

Interesujące artykuły...