Dynamic_Cast C++

Dynamic Cast C



Το δυναμικό cast στη γλώσσα προγραμματισμού C++ θα συζητηθεί σε αυτό το άρθρο. Αρχικά, πρέπει να κατανοήσουμε την έννοια του casting και πολλά είδη χύτευσης. Η διαδικασία αλλαγής του τύπου δεδομένων μιας μεταβλητής είναι γνωστή ως casting. Το Casting χωρίζεται σε δύο κατηγορίες στη γλώσσα προγραμματισμού C++: implicit casting και explicit casting.

Μετατροπή τύπου δεδομένων σε C++:

Η μετάδοση τύπων είναι η διαδικασία αλλαγής του τύπου δεδομένων σε κάποιον άλλο τύπο δεδομένων. Υπάρχουν δύο τύποι casting ή μετατροπής τύπων στη γλώσσα προγραμματισμού C++: η σιωπηρή και η ρητή μετάδοση. Η αυτοματοποιημένη μετατροπή τύπων είναι ένα άλλο όνομα για την σιωπηρή μετάδοση τύπων. Εκτελείται από τον μεταγλωττιστή κατά τη διάρκεια της μεταγλώττισης σε πραγματικό χρόνο και δεν χρειάζεται καμία εισαγωγή ή ενέργεια από το χρήστη. Όταν υπάρχουν δύο είδη τύπων δεδομένων σε μια έκφραση, εμφανίζεται αυτή η μορφή μετάδοσης. Για παράδειγμα:

  Γραφική διεπαφή χρήστη, κείμενο, Περιγραφή εφαρμογής δημιουργείται αυτόματα







Στον δεδομένο κώδικα, μπορούμε να δούμε ότι μια ακέραια μεταβλητή και μια μεταβλητή χαρακτήρων εισάγονται στην έκφραση τελευταίας γραμμής και η τιμή της ακέραιας μεταβλητής 'i' αλλάζει. Το ισοδύναμο αριθμού ASCII του 'a' θα μετατραπεί σε τιμή χαρακτήρων και θα προστεθεί στην ακέραια τιμή της μεταβλητής 'i' σε αυτήν τη δήλωση. Εάν εκτυπωθεί η τιμή της μεταβλητής 'i', το αποτέλεσμα θα είναι το σύνολο και των δύο αυτών τιμών. Ο μεταγλωττιστής μετατρέπει αυτόματα τον τύπο δεδομένων της μεταβλητής χαρακτήρων σε έναν ακέραιο τύπο δεδομένων μετατρέποντάς τον στην τυπική τιμή ASCII του αλφαβήτου στα δεξιά, που είναι ένα εξαιρετικό παράδειγμα σιωπηρής ή αυτοματοποιημένης μετατροπής τύπων κατά το χρόνο εκτέλεσης.



Τώρα, όταν πρόκειται για ρητή χύτευση τύπου ή μετατροπή τύπου, δεν είναι μια αυτοματοποιημένη διαδικασία. ο χρήστης πρέπει να μετατρέψει χειροκίνητα έναν τύπο δεδομένων μιας μεταβλητής σε έναν άλλο τύπο μεταβλητής στον κώδικα. Οι τύποι δεδομένων είναι συνήθως ταξινομημένοι σε μια ιεραρχία με βάση τον χώρο μνήμης τους και την ποσότητα των πληροφοριών που μπορούν να κρατήσουν. Έτσι, όταν χρησιμοποιείται ένας τύπος δεδομένων χαμηλότερης τάξης για την αποθήκευση οποιασδήποτε πληροφορίας, αλλά πρέπει να μετατραπεί σε τύπο δεδομένων υψηλότερης τάξης, έτσι ώστε να ελαχιστοποιηθεί η απώλεια πληροφοριών και να μπορούν να αποθηκευτούν ολοένα και περισσότερες πληροφορίες, είναι συνήθως η ρητή μετάδοση ή η μετατροπή τύπου Ολοκληρώθηκε. Για παράδειγμα, επειδή μια μεταβλητή τύπου ακέραιου δεν μπορεί να αποθηκεύσει τιμές μετά την υποδιαστολή, ενδέχεται να χάσουμε ορισμένες πληροφορίες εάν συνεχίσουμε να χρησιμοποιούμε ακέραιες μεταβλητές. Για να αποφύγουμε αυτήν την απώλεια, μετατρέπουμε την ακέραια μεταβλητή σε μεταβλητή κινητής, αποθηκεύοντας τιμές μετά από δεκαδικά ψηφία και αποτρέποντας την απώλεια πληροφοριών. Η ρητή μετατροπή τύπου στη γλώσσα προγραμματισμού C++ μπορεί να επιτευχθεί με έναν από τους δύο τρόπους: μέσω ανάθεσης ή χρησιμοποιώντας τον τελεστή cast. Η μετατροπή εκχώρησης γίνεται σε μια έκφραση κώδικα και η σύνταξη αυτής της έκφρασης παρέχεται παρακάτω.



# '(τύπος δεδομένων) έκφραση'

Στον παραπάνω κώδικα, πρέπει να βάλουμε έναν έγκυρο τύπο δεδομένων μέσα στην αγκύλη και μετά την αγκύλη, πρέπει να γράψουμε τη μεταβλητή ή την έκφραση που θέλουμε να τροποποιήσουμε στον τύπο δεδομένων που είναι γραμμένος μέσα στην αγκύρωση.





Τώρα θα εξετάσουμε τον τύπο της μετατροπής που γίνεται από τους τελεστές cast στη γλώσσα προγραμματισμού C++. Οι τελεστές Cast ονομάζονται επίσης μονομερείς τελεστές που αναγκάζουν μια μεταβλητή να αλλάξει τον τύπο δεδομένων της από έναν υπάρχοντα σε έναν άλλο. Υπάρχουν τέσσερις τύποι τελεστών casting cast: Static cast, Dynamic cast, Const cast και Re-interpret cast.

Δυναμικό casting σε C++:

Το δυναμικό casting στη γλώσσα προγραμματισμού C++ βασίζεται σε μια έννοια που ονομάζεται RTTI (Run Time Type Identification). Το RTTI είναι μια συνάρτηση που υπάρχει σε πολλές γλώσσες προγραμματισμού όπως C/C++, Ada και Object Pascal. Το Run-Time Type Identification ή Πληροφορίες είναι μια συνάρτηση που προσδιορίζει και εξάγει τις πληροφορίες σχετικά με τις λεπτομέρειες του τύπου δεδομένων ενός αντικειμένου στο χρόνο εκτέλεσης ενός προγράμματος. Αυτή η λειτουργία παρέχει μια ασφαλή διαδρομή για μεθόδους χύτευσης τύπου, όπως η λειτουργία 'typeid' ή η χύτευση δυναμικού τύπου. Ανιχνεύει τις πληροφορίες τύπου δεδομένων στο χρόνο εκτέλεσης και βοηθά στη μετατροπή του τύπου δεδομένων όταν παίζουν οι χειριστές.



Η δυναμική χύτευση χρησιμοποιείται ως επί το πλείστον στη C++ για ασφαλή χύτευση κατά τη διάρκεια του χρόνου. Για να εργαστείτε με το δυναμικό cast, η βασική κλάση πρέπει να έχει 1 εικονική συνάρτηση. Η δυναμική χύτευση λειτουργεί μόνο με πολυμορφικές βασικές κατηγορίες, επειδή χρησιμοποιεί αυτές τις πληροφορίες για τον προσδιορισμό της ασφαλούς χύτευσης προς τα κάτω. Ένας χειριστής δυναμικής χύτευσης κάνει δυναμική χύτευση. Τώρα που γνωρίζουμε τις έννοιες που σχετίζονται με το δυναμικό casting, μπορούμε να πάμε στο μέρος της υλοποίησης. Ας δούμε πρώτα τη σύνταξη για τη χρήση δυναμικής μετάδοσης στη γλώσσα προγραμματισμού C++, η οποία είναι γραμμένη παρακάτω:

# 'dynamic_cast (Expression)'

Στην παραπάνω έκφραση, το πρώτο μέρος περιγράφει το όνομα του χειριστή. στις αγκύλες, γράφουμε το όνομα του τύπου δεδομένων στον οποίο πρέπει να μετατρέψουμε την έκφρασή μας και στις στρογγυλές αγκύλες, γράφουμε το όνομα της μεταβλητής ή του αντικειμένου που θέλουμε να μετατρέψουμε.

Τώρα που ξέρουμε πώς να χρησιμοποιήσουμε τον τελεστή δυναμικής μετάδοσης και να συμπληρώσουμε τις παραμέτρους για τη μετατροπή τύπων δεδομένων μεταβλητών, μπορούμε να τον χρησιμοποιήσουμε για τη μετατροπή τύπων δεδομένων μεταβλητών.

Χρησιμοποιώντας τη μέθοδο Dynamic cast στο Ubuntu 20.04:

Για να εφαρμόσουμε αυτήν την έννοια, πρέπει να χρησιμοποιήσουμε πολλές κλάσεις για να εργαστούμε για τη μετατροπή αντικειμένων της κλάσης με κληρονομικότητα. Επομένως, για να το κάνουμε αυτό πρώτα, πρέπει πρώτα να γνωρίζουμε ότι το αρχείο του προγράμματος C++ στο περιβάλλον του Ubuntu είναι αποθηκευμένο με την επέκταση '.cpp', οπότε για να δημιουργήσετε αυτό το αρχείο στην επιφάνεια εργασίας μας, ανοίξτε ένα τερματικό και πληκτρολογήστε 'cd Desktop' στο γραμμή εντολών, μετά πατήστε enter και πληκτρολογήστε 'touch filename .cpp' για να δημιουργήσετε ένα αρχείο με την επέκταση '.cpp'. Τώρα θα γράψουμε έναν κώδικα σε αυτό το αρχείο για να δημιουργήσουμε μια βασική κλάση και 2 παράγωγες κλάσεις και στον κώδικα του προγράμματος οδήγησης θα χρησιμοποιήσουμε τον τελεστή δυναμικού cast.

  Γραφική διεπαφή χρήστη, κείμενο Περιγραφή που δημιουργείται αυτόματα

Κλείστε το αρχείο αφού κάνετε κλικ στο κουμπί αποθήκευσης. Επιστρέψτε στο τερματικό και δημιουργήστε το αρχείο χρησιμοποιώντας την εντολή 'g++' με το όνομα του αρχείου σας και την επέκταση '.cpp'. Ένα αρχείο με την επέκταση '.out' θα δημιουργηθεί χρησιμοποιώντας αυτήν την εντολή. Μπορείτε τώρα να εκτελέσετε αυτό το αρχείο πληκτρολογώντας './' ακολουθούμενο από την επέκταση '.out'.
  Η περιγραφή κειμένου δημιουργείται αυτόματα

Σε αυτό το πρόγραμμα, ο δείκτης της βασικής κλάσης αποθηκεύει προκύπτοντα αντικείμενα κλάσης 1 (d1). Η βασική κλάση δυναμικής χύτευσης, ο δείκτης διατήρησε το αντικείμενο Παράγωγο1 και το εκχώρησε στην παραγόμενη κλάση 1, η οποία παρείχε έγκυρη δυναμική χύτευση.

συμπέρασμα :

Αυτό το άρθρο μας δίδαξε τη μέθοδο casting τύπου που χρησιμοποιείται στη γλώσσα προγραμματισμού C++. Το είδος του casting συζητήθηκε επίσης λεπτομερώς και επικεντρωθήκαμε στην ανάγκη γιατί χρησιμοποιούμε τέτοιες μεθόδους στον προγραμματισμό C++. Συζητήσαμε τη συνάρτηση υποβοήθησης που βοηθά στη μετατροπή του τύπου δεδομένων της μεταβλητής με την ανάκτηση πληροφοριών και την επαλήθευση της σωστής μετατροπής που ονομάζεται RTTI. Υλοποιήσαμε επίσης την έννοια του Dynamic casting χρησιμοποιώντας τον τελεστή δυναμικής cast σε μια έκφραση στη γλώσσα προγραμματισμού C++ στο περιβάλλον Ubuntu 20.04.