Σε αυτό το σεμινάριο, θα μάθουμε για αφηρημένες εικονικές λειτουργίες και αφηρημένες τάξεις με τη βοήθεια παραδειγμάτων.
Πριν μάθουμε για τις καθαρές εικονικές λειτουργίες, φροντίστε να ελέγξετε αυτά τα μαθήματα:
- Κληρονομιά C ++
- Εικονικές λειτουργίες C ++
C ++ καθαρές εικονικές λειτουργίες
Χρησιμοποιούνται καθαρές εικονικές λειτουργίες
- εάν μια συνάρτηση δεν έχει καμία χρήση στη βασική κλάση
- αλλά η συνάρτηση πρέπει να εφαρμοστεί από όλες τις παράγωγες τάξεις της
Ας πάρουμε ένα παράδειγμα,
Ας υποθέσουμε ότι, έχουμε προέρχονται 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 ++ Abstract Class και Pure Virtual Function
// 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()
στις δύο παραγόμενες τάξεις μας, αλλιώς θα λάβουμε ένα σφάλμα.