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
, Square
a Circle
zajęcia z Shape
klasą, 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
, Square
i Circle
musi 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 Shape
jest 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 Shape
klasy jest czysta funkcja wirtualna.
Dlatego musimy zapewnić implementację calculateArea()
w obu naszych klasach pochodnych, inaczej otrzymamy błąd.