V tomto tutoriále sa pomocou príkladov dozvieme o abstraktných virtuálnych funkciách a abstraktných triedach.
Predtým, ako sa dozvieme o čisto virtuálnych funkciách, nezabudnite si prečítať tieto návody:
- Dedičnosť v C ++
- C ++ virtuálne funkcie
Čisté virtuálne funkcie v C ++
Používajú sa čisto virtuálne funkcie
- ak funkcia nemá v základnej triede žiadne použitie
- ale funkcia musí byť implementovaná vo všetkých jej odvodených triedach
Zoberme si príklad,
Predpokladajme, že sme odvodili Triangle
, Square
a Circle
triedy zo Shape
triedy, a chceme vypočítať plochu všetkých týchto tvarov.
V tomto prípade môžeme vytvoriť čisto virtuálnu funkciu pomenovanú calculateArea()
v Shape
. Vzhľadom k tomu, že je to čisto virtuálne funkcie, všetky odvodené triedy Triangle
, Square
a Circle
musí obsahovať calculateArea()
funkciu s realizáciou.
Čistá virtuálna funkcia nemá telo funkcie a musí sa končiť = 0
. Napríklad,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Poznámka:= 0
syntax neznamená, že by sme sa priradením 0 do funkcie. Je to spôsob, akým definujeme čisto virtuálne funkcie.
Abstraktná trieda
Trieda, ktorá obsahuje čisto virtuálnu funkciu, sa nazýva abstraktná trieda. Vo vyššie uvedenom príklade je triedou Shape
abstraktná trieda.
Nemôžeme vytvárať objekty abstraktnej triedy. Môžeme z nich však odvodiť triedy a používať ich dátové členy a členské funkcie (okrem čisto virtuálnych funkcií).
Príklad: C ++ abstraktná trieda a čistá virtuálna funkcia
// 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ýkon
Zadajte dĺžku pre výpočet plochy štvorca: 4 Plocha štvorca: 16 Zadajte polomer pre výpočet plochy kruhu: 5 Plocha kruhu: 78,5
V tomto programe je virtual float calculateArea() = 0;
vo vnútri Shape
triedy čisto virtuálna funkcia.
Preto musíme zabezpečiť implementáciu calculateArea()
v oboch našich odvodených triedach, inak sa zobrazí chyba.