Ebben az oktatóanyagban az elvont virtuális függvényekről és az absztrakt osztályokról tanulunk példák segítségével.
Mielőtt megismernénk a tiszta virtuális függvényeket, ellenőrizze ezeket az oktatóanyagokat:
- C ++ öröklés
- C ++ virtuális függvények
C ++ tiszta virtuális funkciók
Tiszta virtuális függvényeket használnak
- ha egy függvénynek nincs felhasználása az alaposztályban
- de a függvényt az összes származtatott osztályának végre kell hajtania
Vegyünk egy példát,
Tegyük fel, már nyert Triangle
, Square
és Circle
osztályokat a Shape
class, és azt akarjuk, hogy területének kiszámítására mindezen formák.
Ebben az esetben létrehozhatunk egy tiszta virtuális függvényt, amelyet calculateArea()
a Shape
. Mivel ez egy tisztán virtuális függvény, mind a származtatott osztályokban Triangle
, Square
és Circle
tartalmaznia kell a calculateArea()
funkció végrehajtását.
A tiszta virtuális függvénynek nincs függvényteste, és ennek a végével kell végződnie = 0
. Például,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Megjegyzés: A = 0
szintaxis nem azt jelenti, hogy 0-t rendelünk a függvényhez. Csak úgy definiáljuk a tiszta virtuális függvényeket.
Absztrakt osztály
A tiszta virtuális függvényt tartalmazó osztály absztrakt osztályként ismert. A fenti példában az osztály Shape
absztrakt osztály.
Nem hozhatunk létre absztrakt osztály objektumait. Osztályokat azonban levezethetünk belőlük, és felhasználhatjuk adattagjaikat és tagfüggvényeiket (a tiszta virtuális függvények kivételével).
Példa: C ++ absztrakt osztály és tiszta virtuális függvény
// 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; )
Kimenet
Írja be a hosszat a négyzet területének kiszámításához: 4 A négyzet területe: 16 Írja be a sugarat a kör területének kiszámításához: 5 A kör területe: 78.5
Ebben a programban virtual float calculateArea() = 0;
az Shape
osztály belsejében van egy tiszta virtuális függvény.
Ezért biztosítanunk kell calculateArea()
mindkét származtatott osztály megvalósítását, különben hibát kapunk.