Šioje pamokoje pavyzdžių pagalba sužinosime apie abstrakčias virtualias funkcijas ir abstrakčias klases.
Prieš sužinodami apie grynąsias virtualias funkcijas, būtinai patikrinkite šias pamokas:
- C ++ paveldėjimas
- C ++ virtualios funkcijos
C ++ grynos virtualios funkcijos
Naudojamos grynos virtualios funkcijos
- jei funkcija nėra naudojama pagrindinėje klasėje
- bet funkciją turi įgyvendinti visos išvestinės jos klasės
Paimkime pavyzdį,
Tarkime, mes kilęs Triangle
, Square
ir Circle
klases iš Shape
klasės, ir mes norime apskaičiuoti visų šių formų plotą.
Tokiu atveju, mes galime sukurti gryną virtualią funkciją pavadintą calculateArea()
į Shape
. Kadangi tai grynas virtualus funkcija, visi gautų klases Triangle
, Square
ir Circle
turi apimti calculateArea()
funkciją įgyvendinti.
Gryna virtuali funkcija neturi funkcijos kūno ir ji turi baigtis = 0
. Pavyzdžiui,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Pastaba:= 0
sintaksė nereiškia, kad mes yra priskirti 0 iki funkcijos. Tai tik būdas apibrėžti grynąsias virtualias funkcijas.
Anotacija
Klasė, kurioje yra gryna virtuali funkcija, yra žinoma kaip abstrakti klasė. Ankstesniame pavyzdyje klasė Shape
yra abstrakti klasė.
Mes negalime sukurti abstrakčios klasės objektų. Tačiau galime iš jų išvesti klases ir naudoti jų duomenų narius ir narių funkcijas (išskyrus grynąsias virtualias funkcijas).
Pavyzdys: C ++ abstrakti klasė ir gryna virtuali 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; )
Rezultatas
Norėdami apskaičiuoti kvadrato plotą, įveskite ilgį: 4 Kvadrato plotas: 16 Įveskite spindulį, kad apskaičiuotumėte apskritimo plotą: 5 Apskritimo plotas: 78,5
Šioje programoje klasės virtual float calculateArea() = 0;
viduje Shape
yra gryna virtuali funkcija.
Štai kodėl mes turime užtikrinti calculateArea()
abiejų išvestinių klasių įgyvendinimą, nes kitaip gausime klaidą.