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
, Square
a Circle
třídy ze Shape
tří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
, Square
a Circle
musí 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 Shape
abstraktní 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ř Shape
tří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.