Selles õpetuses õpime näidete abil abstraktsetest virtuaalsetest funktsioonidest ja abstraktsetest klassidest.
Enne puhta virtuaalsete funktsioonide tundmaõppimist kontrollige kindlasti neid õpetusi:
- C ++ pärand
- C ++ virtuaalsed funktsioonid
C ++ puhtad virtuaalsed funktsioonid
Kasutatakse puhtaid virtuaalseid funktsioone
- kui funktsioonil pole baasklassis mingit kasutamist
- kuid funktsiooni peavad rakendama kõik selle tuletatud klassid
Võtame näite,
Oletame, oleme saadud Triangle
, Square
ja Circle
klasside Shape
klass, ja me tahame arvutada pindala kõik need kujundid.
Sel juhul saame luua puhta virtuaalse funktsiooni, mille nimi calculateArea()
on Shape
. Kuna see on puhas virtuaalne funktsioon, kõik tuletatud klassid Triangle
, Square
ja Circle
peab sisaldama calculateArea()
funktsiooni rakendamist.
Puhtal virtuaalsel funktsioonil pole funktsiooni keha ja see peab lõppema = 0
. Näiteks,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Märkus . = 0
Süntaks ei tähenda, et määraksime funktsioonile 0. See on lihtsalt viis, kuidas määratleme puhtad virtuaalsed funktsioonid.
Abstraktne klass
Klass, mis sisaldab puhast virtuaalset funktsiooni, on tuntud kui abstraktne klass. Ülaltoodud näites on klass Shape
abstraktne klass.
Me ei saa luua abstraktse klassi objekte. Siiski võime neist tuletada klassid ja kasutada nende andmeliikmeid ja liikmete funktsioone (välja arvatud puhtad virtuaalsed funktsioonid).
Näide: C ++ abstraktne klass ja puhas virtuaalne funktsioon
// 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; )
Väljund
Ruudu pindala arvutamiseks sisestage pikkus: 4 Ruudu pindala: 16 Sisestage ringi pindala arvutamiseks raadius: 5 Ringi pindala: 78,5
Selles programmis virtual float calculateArea() = 0;
on Shape
klassi sees puhas virtuaalne funktsioon.
Sellepärast peame pakkuma calculateArea()
mõlema tuletatud klassi rakenduse, muidu saame vea.