Πώς να μετατρέψετε τύπους δεδομένων σε C++

Pos Na Metatrepsete Typous Dedomenon Se C



Η διαδικασία αλλαγής του τύπου δεδομένων μιας μεταβλητής σε μια άλλη είναι γνωστή ως μετατροπή τύπου ή μετάδοση τύπων στη C++. Αυτό γίνεται για την εκτέλεση μαθηματικών πράξεων στις μεταβλητές διαφορετικών τύπων δεδομένων, καθιστώντας τους τύπους δεδομένων τους συμβατούς μεταξύ τους. Η μετατροπή τύπου βελτιστοποιεί τον κώδικα. Για παράδειγμα, κατά τον υπολογισμό της διαφοράς μεταξύ δύο μεταβλητών, εάν ο ένας αριθμός είναι σε τύπο float και ο άλλος σε ακέραιο τύπο δεδομένων, τότε ο ακέραιος τύπος δεδομένων θα μετατραπεί σε τύπο float για να πραγματοποιηθεί η αφαίρεση.

Πώς να μετατρέψετε τύπους δεδομένων σε C++

Στη C++, υπάρχουν δύο τρόποι αλλαγής τύπων δεδομένων:

Implicit Type Conversion

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







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





Παραγγελία για μετατροπή τύπου

Η σωστή σειρά για τη μετατροπή τύπου δίνεται ως:





μπολ -- > χαρ -- > σύντομο int -- > int -- > ανυπόγραφο int -- > μακρύς -- > ανυπόγραφο μακρύ -- > μακρύ μακρύ -- > επιπλέω -- > διπλό -- > μακρύ διπλό

Η μεταβλητή τύπου χαμηλής ακρίβειας μετατρέπεται στον τύπο δεδομένων υψηλής ακρίβειας για να αποτραπεί η απώλεια δεδομένων.

Παράδειγμα 1

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



#include
χρησιμοποιώντας χώρο ονομάτων std ;

ενθ κύριος ( ) {
ενθ αριθμός = 100 ;
απανθρακώνω χαρακτήρας = 'ΝΤΟ' ;
cout << '100 + 'C' = ' << αριθμός + χαρακτήρας << endl ;

φλοτέρ val = αριθμός + 'ντο' ;
cout << 'float val(100 + 'c') = ' << val << endl ;

ενθ ήταν = 7890 ;
μακρύς δεν ήταν = ήταν ;
cout << 'var_int = ' << δεν ήταν ;
ΕΠΙΣΤΡΟΦΗ 0 ;
}

Εδώ προστίθενται ένας ακέραιος και ένας χαρακτήρας από τον πίνακα ASCII και ένας αριθμός float και χαρακτήρας «c». Ο ακέραιος διατηρείται στο τρίτο τμήμα ως μεγάλος τύπος δεδομένων και οι τύποι δεδομένων αλλάζουν από τον ίδιο τον μεταγλωττιστή με βάση τους προκαθορισμένους κανόνες του.

Το άθροισμα του 100 και του «C» επιστρέφει 167 καθώς το «C» ισοδυναμεί με 67 σε αριθμούς και το 100+» c» επιστρέφει 199 καθώς τα πεζά «c» ισοδυναμούν με 99. Η μεταβλητή int αποθηκεύεται σε έναν τύπο δεδομένων μεγάλου μήκους.

Παράδειγμα 2

Σε αυτό το παράδειγμα, ο χαρακτήρας D μετατρέπεται σε float για να εκτελέσει τη λειτουργία διαίρεσης.

#include
χρησιμοποιώντας χώρο ονομάτων std ;

ενθ κύριος ( ) {
απανθρακώνω Χ = 'ΡΕ' ;

φλοτέρ float_var ;

float_var = φλοτέρ ( Χ ) / 'ντο' ;
// Ρητή μετατροπή ενός int σε float.

cout << 'Η τιμή του float_var είναι: ' << float_var << endl ;

ΕΠΙΣΤΡΟΦΗ 0 ;
}

Η τιμή εισόδου έχει τη μορφή του χαρακτήρα D που αποθηκεύεται σε τύπο δεδομένων float και διαιρείται περαιτέρω με τον χαρακτήρα C. Αυτοί οι χαρακτήρες αλλάζουν σε αριθμητικές τιμές και εκτελείται μια λειτουργία διαίρεσης σε αυτούς, επιστρέφοντας την τιμή σε float.

Ρητή μετατροπή τύπων

Ο χρήστης πρέπει να αλλάξει χειροκίνητα τον τύπο δεδομένων με τη ρητή μετατροπή τύπων της C++, που συχνά είναι γνωστή ως μετάδοση τύπου. Αυτός ο τύπος χύτευσης γίνεται για να αποφευχθεί η σιωπηρή μετατροπή τύπου. Υπάρχουν δύο μέθοδοι για να πραγματοποιήσετε Casting Explicit Type στη C++:

  • Μετατροπή με χρήση του χειριστή ανάθεσης
  • Μετατροπή με χρήση του Cast Operator

Πληκτρολογήστε Conversion χρησιμοποιώντας το Assignment Operator στη C++

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

Παράδειγμα
Αυτό το πρόγραμμα υπολογίζει την περιοχή του κύκλου χρησιμοποιώντας χύτευση τύπου.

#include
#include
χρησιμοποιώντας χώρο ονομάτων std ;
ενθ κύριος ( )
{
ενθ ακτίνα κύκλου ;
cout <> ακτίνα κύκλου ;
φλοτέρ περιοχή = M_PI * ακτίνα κύκλου * ακτίνα κύκλου ;
cout << 'Περιοχή κύκλου με ακτίνα' << ακτίνα κύκλου << ' = ' << περιοχή ;
}

Ο τελεστής εκχώρησης χρησιμοποιείται για την εκχώρηση της τιμής float στην περιοχή, η οποία αποτελείται από την τιμή της ακτίνας σε ακέραιο τύπο δεδομένων.

Η περιοχή του κύκλου επιστρέφεται σε τύπο δεδομένων float, ενώ η ακτίνα εισάγεται σε ακέραιο τύπο δεδομένων. Έτσι, ο τύπος δεδομένων της μεταβλητής αλλάζει μέσω casting τύπου χρησιμοποιώντας τον τελεστή εκχώρησης.

Τύπος Μετατροπή με χρήση του τελεστή Cast στη C++

Η μετατροπή τύπου γίνεται χρησιμοποιώντας έναν τελεστή cast, ο οποίος αναγκάζει έναν τύπο δεδομένων να αλλάξει σε άλλο τύπο σύμφωνα με τις ανάγκες του προγράμματος.

Υπάρχουν τέσσερις διαφορετικοί χειριστές Cast:

  • static_cast
  • const_cast
  • dynamic_cast
  • reinterpret_cast

1: static_cast

Ο static_cast είναι ο τελεστής casting που χρησιμοποιείται για τη ρητή μετατροπή float και χαρακτήρων σε ακέραιους αριθμούς και ούτω καθεξής. Αυτός είναι ο πιο βασικός χειριστής cast. Μπορεί να εκπέμψει τύπους δεδομένων παρόμοιας φύσης. Μπορεί να μετατρέψει δείκτες από μια φόρμα σε άλλη, επομένως μπορεί να χρησιμοποιηθεί και για διαχείριση μνήμης.

Σύνταξη

static_cast ( έκφραση )

Παράδειγμα
Αυτό το πρόγραμμα έχει κατασκευαστεί για να μετατρέπει μια διπλή μεταβλητή σε τύπο δεδομένων int χρησιμοποιώντας static_cast. Θα κόψει οποιοδήποτε δεκαδικό μέρος στην έξοδο.

#include
χρησιμοποιώντας χώρο ονομάτων std ;
ενθ κύριος ( )
{
// Δηλώστε μια μεταβλητή
διπλό Π ;
Π = 2.905 * 1.235 * 24.675 ;
φλοτέρ αποτέλεσμα ;

cout << ' Πριν χρησιμοποιήσετε το στατικό γύψο:' << endl ;
cout << 'Η τιμή του p =' << Π << endl ;

// χρησιμοποιήστε το static_cast για να μετατρέψετε τον τύπο δεδομένων
αποτέλεσμα = static_cast ( Π ) ;
cout << ' Μετά τη χρήση του στατικού εκμαγείου: ' << endl ;
cout << 'Η τιμή του αποτελέσματος =' << αποτέλεσμα << endl ;

ΕΠΙΣΤΡΟΦΗ 0 ;
}

Αρχικά, μια διπλή μεταβλητή p φορτώνεται με τιμές που πολλαπλασιάζονται η μία με την άλλη και αποθηκεύονται στο αποτέλεσμα. Το αποτέλεσμα περιέχει το αποτέλεσμα πριν και μετά τον τελεστή static_cast:

Πριν χρησιμοποιήσετε τον τελεστή static_cast, το αποτέλεσμα εμφανίζεται σε δεκαδικά ψηφία, ενώ μετά τη χρήση αυτού του τελεστή εμφανίζεται σε ακέραιο τύπο δεδομένων.

2: const_cast

Ο τελεστής const_cast χρησιμοποιείται για τη μετατροπή μιας σταθερής τιμής ενός αντικειμένου στον μη σταθερό τύπο. Χρησιμοποιείται όπου δηλώνεται ένα σταθερό αντικείμενο και πρέπει να αλλάζουμε την τιμή του περιστασιακά.

Σύνταξη

const_cast ( έκφραση )

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

#include
χρησιμοποιώντας χώρο ονομάτων std ;
ενθ κύριος ( ) {
συνθ ενθ Χ = 70 ;
συνθ ενθ * και = & Χ ;
cout << 'Η παλιά αξία είναι' << * και << ' \n ' ;
ενθ * Με = const_cast ( και ) ;
* Με = 90 ;
cout << 'Η νέα τιμή είναι' << * και ;
ΕΠΙΣΤΡΟΦΗ 0 ;
}

Ο προσδιορισμός σταθεράς εκχωρείται σε μια μεταβλητή int x που σημαίνει ότι αυτή η μεταβλητή δεν μπορεί να τροποποιηθεί άμεσα. Μετά από αυτό το int *y που είναι δείκτης χρησιμοποιείται για την πρόσβαση στο x, αλλά και πάλι δεν μπορεί να αλλάξει και η αρχική του τιμή εμφανίζεται χρησιμοποιώντας το cout. Χρησιμοποιώντας τον τελεστή const_cast, δημιουργείται ένας δείκτης z που δεν είναι σταθερός, χρησιμοποιείται για πρόσβαση στην τιμή του x καθιστώντας τον επεξεργάσιμο. Αλλάζει την τιμή που έχει εκχωρηθεί στο z με 90 που αλλάζει έμμεσα την τιμή στο x.

Αρχικά, η τιμή της σταθερής μεταβλητής x είναι 70 η οποία τροποποιείται χρησιμοποιώντας τον τελεστή const_cast, καθιστώντας την 90.

3: dynamic_cast

με την ιεραρχία της κληρονομικότητας, η οποία αναφέρεται και ως downcast ασφαλής τύπου. Το Down casting είναι η διαδικασία μετατροπής μιας αναφοράς ή δείκτη σε μια παράγωγη κλάση από μια αναφορά ή δείκτη βασικής κλάσης.

Σύνταξη

dynamic_cast ( έκφραση )

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

#include
#include <εξαίρεση>
χρησιμοποιώντας χώρο ονομάτων std ;
τάξη TBase
{
δημόσιο :
φλοτέρ βάση_ζ = 9,81 ;

εικονικός κενός ανδρείκελο ( )
{

} ;
} ;

τάξη TΠροέρχεται : δημόσιο TBase
{
δημόσιο :
ενθ local_g = 9,78 ;
} ;

ενθ κύριος ( )
{

TBase * βάση = νέος TΠροέρχεται ;
TΠροέρχεται * συμπληρωματικός ;

συμπληρωματικός = dynamic_cast ( βάση ) ;

cout < βάση_ζ << endl ;
cout < local_g << endl ;

getchar ( ) ;
ΕΠΙΣΤΡΟΦΗ 0 ;
}

Δύο κλάσεις ορίζονται ως βασικές και παράγωγες κλάσεις. Δημιουργείται μια βάση δείκτη τύπου TBase* και εκχωρείται σε ένα δυναμικά εκχωρημένο αντικείμενο τύπου TDerived. Ένα παραγόμενο αντικείμενο κλάσης μπορεί να αντιστοιχιστεί σε έναν δείκτη κλάσης βάσης σε αυτήν την περίπτωση πολυμορφισμού. Το dynamic_cast ελέγχει εάν ο δείκτης έχει πρόσβαση στο έγκυρο αντικείμενο του TDerived, εάν το cast έχει ένα επιτυχημένο αποτέλεσμα, η παραγόμενη κλάση θα λάβει ένα έγκυρο αποτέλεσμα, διαφορετικά θα επιστρέψει μια τιμή null.

4: reinterpret_cast

Το reinterpret_cast μετατρέπει έναν δείκτη ενός τύπου δεδομένων σε έναν δείκτη διαφορετικού τύπου δεδομένων. Δεν ελέγχει εάν οι τύποι δεδομένων των δεικτών είναι ίδιοι ή όχι. Αυτός ο χειριστής χύτευσης πρέπει να χρησιμοποιείται και να χειρίζεται προσεκτικά.

Παράδειγμα
Σε αυτήν την εικόνα, ο δείκτης ενός τύπου δεδομένων επανερμηνεύεται σε δείκτη άλλου τύπου δεδομένων χρησιμοποιώντας το reinterpret_cast:

#include
χρησιμοποιώντας χώρο ονομάτων std ;

ενθ κύριος ( )
{
ενθ * q = νέος ενθ ( 70 ) ;
απανθρακώνω * κεφ = reinterpret_cast ( q ) ;
cout << * q << endl ;
cout << * κεφ << endl ;
cout << q << endl ;
cout << κεφ << endl ;
ΕΠΙΣΤΡΟΦΗ 0 ;
}

Αρχικά, εκχωρείται ένας ακέραιος με την τιμή 70. Ο δείκτης q δείχνει σε αυτόν τον δυναμικά εκχωρημένο ακέραιο. Το reinterpret_cast χρησιμοποιείται για την επανερμηνεία του δείκτη q ως δείκτη χαρακτήρων ch, πράγμα που σημαίνει ότι η μνήμη που είχε αρχικά αντιστοιχιστεί στο q αντιμετωπίζεται τώρα σαν να είναι χαρακτήρας. Χρησιμοποιώντας την εντολή cout, εκτυπώνει την τιμή που έχει εκχωρηθεί στα q και ch. Εφόσον το ch αντιμετωπίζεται ως δείκτης χαρακτήρων, θα επιστρέψει μια τιμή χαρακτήρα.

Εκτυπώνει την τιμή που δείχνει στο ch χρησιμοποιώντας *ch. Ωστόσο, δεδομένου ότι το ch αντιμετωπίζεται ως δείκτης χαρακτήρων, αυτή η γραμμή θα ερμηνεύσει τη μνήμη ως χαρακτήρα. Εκτυπώνει τη διεύθυνση μνήμης που είναι αποθηκευμένη στον δείκτη ch χρησιμοποιώντας το ch. Αυτή είναι η ίδια διεύθυνση μνήμης με το q γιατί είναι απλώς μια επανερμηνεία της ίδιας μνήμης.

Αρχικά, ο ακέραιος αποθηκεύει 70. Αργότερα, αυτό χειρίζεται μεταξύ του δείκτη q και του δείκτη ch. Οι έξοδοι 2 και 4 είναι ίδιες επειδή η δεύτερη τιμή ερμηνεύεται εκ νέου χρησιμοποιώντας το reinterpret_cast.

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

συμπέρασμα

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