C ++ abstraktná trieda a číra virtuálna funkcia

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, Squarea Circletriedy zo Shapetriedy, 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, Squarea Circlemusí 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 Shapeabstraktná 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 Shapetriedy čisto virtuálna funkcia.

Preto musíme zabezpečiť implementáciu calculateArea()v oboch našich odvodených triedach, inak sa zobrazí chyba.

Zaujímavé články...