U ovom uputstvu uz primjere ćemo naučiti apstraktne virtualne funkcije i apstraktne klase.
Prije nego što naučimo o čistim virtualnim funkcijama, svakako provjerite ove upute:
- Nasljeđivanje C ++
- C ++ virtualne funkcije
C ++ čiste virtualne funkcije
Koriste se čiste virtualne funkcije
- ako funkcija nema nikakve koristi u osnovnoj klasi
- ali funkciju moraju provoditi sve njezine izvedene klase
Uzmimo primjer,
Recimo, mi smo izvedeni Triangle
, Square
a Circle
nastava iz Shape
razreda, i želimo izračunati površinu svih tih oblika.
U ovom slučaju možemo stvoriti čistu virtualnu funkciju imenovanu calculateArea()
u Shape
. Budući da je čista virtualna funkcija, svi izvedeni razredi Triangle
, Square
a Circle
mora sadržavati calculateArea()
funkciju s provedbom.
Čista virtualna funkcija nema tijelo funkcije i mora završiti s = 0
. Na primjer,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Napomena:= 0
sintaksa ne znači da su dodjeljivanje 0 do funkcije. To je samo način na koji definiramo čiste virtualne funkcije.
Sažetak klase
Klasa koja sadrži čistu virtualnu funkciju poznata je kao apstraktna klasa. U gornjem primjeru razred Shape
je apstraktni razred.
Ne možemo stvoriti objekte apstraktne klase. Međutim, od njih možemo izvoditi klase i koristiti njihove članove podataka i funkcije članova (osim čistih virtualnih funkcija).
Primjer: C ++ apstraktna klasa i čista virtualna funkcija
// 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; )
Izlaz
Unesite duljinu za izračunavanje površine kvadrata: 4 Površina kvadrata: 16 Unesite radijus za izračunavanje površine kruga: 5 Površina kruga: 78,5
U ovom programu virtual float calculateArea() = 0;
unutar Shape
klase je čista virtualna funkcija.
Zbog toga moramo osigurati implementaciju calculateArea()
u obje izvedene klase, inače ćemo dobiti pogrešku.