V tej vadnici bomo s pomočjo primerov spoznali abstraktne virtualne funkcije in abstraktne razrede.
Preden se naučimo čiste navidezne funkcije, si oglejte te vaje:
- Dedovanje C ++
- Navidezne funkcije C ++
C ++ čiste navidezne funkcije
Uporabljajo se čiste navidezne funkcije
- če funkcija v osnovnem razredu nima nobene uporabe
- vendar morajo funkcijo izvajati vsi njeni izvedeni razredi
Vzemimo primer,
Recimo, smo bili pridobljeni Triangle
, Square
in Circle
razredi iz Shape
razreda, in želimo izračunati površino vseh teh oblik.
V tem primeru lahko ustvarimo čisto navidezno funkcijo, imenovano calculateArea()
v Shape
. Ker je to čista virtualna funkcija, vsi izpeljani razredi Triangle
, Square
in Circle
mora vsebovati calculateArea()
funkcijo pri izvajanju.
Čista navidezna funkcija nima telesa funkcije in se mora končati z = 0
. Na primer
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Opomba:= 0
sintaksa ne pomeni, da se dodeljevanje 0 funkciji. To je samo način, kako definiramo čiste navidezne funkcije.
Povzetek
Razred, ki vsebuje čisto navidezno funkcijo, je znan kot abstraktni razred. V zgornjem primeru je razred Shape
abstraktni.
Ne moremo ustvariti predmetov abstraktnega razreda. Vendar lahko iz njih izpeljemo razrede in uporabimo njihove podatkovne člane in funkcije članov (razen čistih navideznih funkcij).
Primer: C ++ abstraktni razred in čista navidezna funkcija
// 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; )
Izhod
Vnesite dolžino za izračun površine kvadrata: 4 Površina kvadrata: 16 Vnesite radij za izračun površine kroga: 5 Površina kroga: 78,5
V tem programu je virtual float calculateArea() = 0;
znotraj Shape
razreda čista navidezna funkcija.
Zato moramo zagotoviti izvajanje calculateArea()
v obeh izpeljanih razredih, sicer bomo dobili napako.