У овом упутству ћемо научити о апстрактним виртуелним функцијама и апстрактним часовима уз помоћ примера.
Пре него што научимо о чистим виртуелним функцијама, обавезно проверите ове водиче:
- Наслеђивање Ц ++
- Ц ++ виртуелне функције
Ц ++ чисте виртуелне функције
Користе се чисте виртуелне функције
- ако функција нема никакве користи у основној класи
- али функцију морају имплементирати све њене изведене класе
Узмимо пример,
Претпоставимо, ми смо изведени Triangle
, Square
а Circle
настава из Shape
класе, и желимо да израчуна површину свих ових облика.
У овом случају можемо створити чисту виртуелну функцију именовану calculateArea()
у Shape
. Пошто је чиста виртуелни функција свих изведених класе Triangle
, Square
и Circle
мора садржати calculateArea()
функцију са имплементације.
Чиста виртуелна функција нема тело функције и мора завршити са = 0
. На пример,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Напомена:= 0
синтакса не значи да се додељивање 0 функцији. То је само начин на који дефинишемо чисте виртуелне функције.
Апстрактни час
Класа која садржи чисту виртуелну функцију позната је као апстрактна класа. У горњем примеру, класа Shape
је апстрактна класа.
Не можемо створити објекте апстрактне класе. Међутим, можемо из њих изводити класе и користити њихове чланове података и функције чланова (осим чистих виртуелних функција).
Пример: Ц ++ апстрактна класа и чиста виртуелна функција
// 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; )
Оутпут
Унесите дужину за израчунавање површине квадрата: 4 Површина квадрата: 16 Унесите радијус за израчунавање површине круга: 5 Површина круга: 78,5
У овом програму, virtual float calculateArea() = 0;
унутар Shape
класе је чиста виртуелна функција.
Због тога морамо обезбедити имплементацију calculateArea()
у обе наше изведене класе, иначе ћемо добити грешку.