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.








