C ++ absztrakt osztály és tiszta virtuális funkció

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 Circleosztályokat a Shapeclass, é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 Circletartalmaznia 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 = 0szintaxis 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 Shapeabsztrakt 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 Shapeosztá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.

érdekes cikkek...