I denna handledning lär vi oss om abstrakta virtuella funktioner och abstrakta klasser med hjälp av exempel.
Innan vi lär oss om rena virtuella funktioner, se till att kolla in dessa självstudier:
- C ++ arv
- C ++ virtuella funktioner
C ++ rena virtuella funktioner
Rena virtuella funktioner används
- om en funktion inte har någon användning i basklassen
- men funktionen måste implementeras av alla dess härledda klasser
Låt oss ta ett exempel,
Antag vi har härletts Triangle
, Square
och Circle
klasser från Shape
klass, och vi vill beräkna området av alla dessa former.
I det här fallet kan vi skapa en ren virtuell funktion som heter calculateArea()
i Shape
. Eftersom det är en ren virtuell funktion, alla härledda klasser Triangle
, Square
och Circle
måste inkludera calculateArea()
funktionen med genomförandet.
En ren virtuell funktion har inte funktionens kropp och den måste sluta med = 0
. Till exempel,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Obs: Den = 0
syntax betyder inte att vi tilldelar 0 till funktionen. Det är precis hur vi definierar rena virtuella funktioner.
Abstrakt klass
En klass som innehåller en ren virtuell funktion kallas en abstrakt klass. I exemplet ovan är klassen Shape
en abstrakt klass.
Vi kan inte skapa objekt i en abstrakt klass. Vi kan dock härleda klasser från dem och använda deras datamedlemmar och medlemsfunktioner (förutom rena virtuella funktioner).
Exempel: C ++ abstrakt klass och ren virtuell funktion
// 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; )
Produktion
Ange längden för att beräkna arean av en kvadrat: 4 kvadratarea: 16 Ange radien för att beräkna arean av en cirkel: 5 cirkelarea: 78,5
I det här programmet är det en ren virtuell funktion virtual float calculateArea() = 0;
i Shape
klassen.
Det är därför vi måste tillhandahålla implementeringen av calculateArea()
i båda våra härledda klasser, annars får vi ett fel.