C ++ abstraktní třída a čistá virtuální funkce

V tomto kurzu se na příkladech seznámíme s abstraktními virtuálními funkcemi a abstraktními třídami.

Než se dozvíme o čistě virtuálních funkcích, nezapomeňte zkontrolovat tyto výukové programy:

  • Dědičnost v C ++
  • C ++ virtuální funkce

Čisté virtuální funkce v C ++

Používají se čisté virtuální funkce

  • pokud funkce nemá v základní třídě žádné použití
  • ale funkce musí být implementována všemi odvozenými třídami

Vezměme si příklad,

Předpokládejme, že jsme odvodili Triangle, Squarea Circletřídy ze Shapetřídy, a chceme vypočítat plochu všech těchto tvarů.

V tomto případě můžeme vytvořit čistě virtuální funkci pojmenovanou calculateArea()v Shape. Vzhledem k tomu, že je to čistě virtuální funkce, všechny odvozené třídy Triangle, Squarea Circlemusí obsahovat calculateArea()funkci s realizací.

Čistá virtuální funkce nemá tělo funkce a musí končit = 0. Například,

 class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );

Poznámka:= 0 syntax neznamená, že bychom se přiřazením 0 do funkce. Je to způsob, jakým definujeme čisté virtuální funkce.

Abstraktní třída

Třída, která obsahuje čistě virtuální funkci, se nazývá abstraktní třída. Ve výše uvedeném příkladu je třída Shapeabstraktní třídou.

Nemůžeme vytvářet objekty abstraktní třídy. Můžeme z nich však odvodit třídy a používat jejich datové členy a členské funkce (kromě čistých virtuálních funkcí).

Příklad: C ++ abstraktní třída a čistá virtuální funkce

 // 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ýstup

 Zadejte délku pro výpočet plochy čtverce: 4 Plocha čtverce: 16 Zadejte poloměr pro výpočet plochy kružnice: 5 Plocha kruhu: 78,5

V tomto programu je virtual float calculateArea() = 0;uvnitř Shapetřídy čistě virtuální funkce.

To je důvod, proč musíme zajistit implementaci calculateArea()v obou našich odvozených třídách, jinak se zobrazí chyba.

Zajímavé články...