Παραδείγματα Ένωσης C++

Paradeigmata Enoses C



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

Σύνταξη:

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







Η βασική σύνταξη είναι η εξής:



ένωση UnionName {

// Δηλώσεις μελών

DataType1 μέλος1 ;

DataType2 μέλος2 ;

//...

} ;

Εδώ, το 'UnionName' χρησιμεύει ως το αναγνωριστικό για την ένωση που παρέχει ένα μοναδικό όνομα για αναφορά σε αυτόν τον συγκεκριμένο τύπο που ορίζεται από το χρήστη. Οι τύποι δεδομένων των μελών της ένωσης δηλώνονται ως 'Type1', 'DataType2' και ούτω καθεξής. Αυτοί οι τύποι δεδομένων δηλώνουν τους διάφορους τύπους πληροφοριών που μπορούν να αποθηκευτούν στην ένωση. Κάθε μέλος στο σωματείο, που ορίζεται με ονόματα όπως «μέλος1», «μέλος2» κ.λπ., αντιπροσωπεύει ένα ξεχωριστό κομμάτι δεδομένων.



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





Παράδειγμα 1: Βασική χρήση της Ένωσης

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

Εδώ είναι ένα παράδειγμα:



#include

χρησιμοποιώντας το namespace std ;

ένωση ArrayUnion {

ενθ intArray [ 5 ] ;

φλοτέρ floatArray [ 5 ] ;

} ;

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

ArrayUnion arrayUnion ;

Για ( ενθ Εγώ = 0 ; Εγώ < 5 ; ++ Εγώ ) {

arrayUnion. intArray [ Εγώ ] = Εγώ * 2 ;

}

cout << 'Int Array:' ;

Για ( ενθ Εγώ = 0 ; Εγώ < 5 ; ++ Εγώ ) {

cout << '' << arrayUnion. intArray [ Εγώ ] ;

}

cout << endl ;

Για ( ενθ Εγώ = 0 ; Εγώ < 5 ; ++ Εγώ ) {

arrayUnion. floatArray [ Εγώ ] = Εγώ * 1,5 στ ;

}

cout << 'Float Array:' ;

Για ( ενθ Εγώ = 0 ; Εγώ < 5 ; ++ Εγώ ) {

cout << '' << arrayUnion. floatArray [ Εγώ ] ;

}

cout << endl ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Σε αυτό το απόσπασμα κώδικα C++, χρησιμοποιούμε μια ένωση με το όνομα 'MyUnion' που ενσωματώνει τρία διαφορετικά μέλη δεδομένων: έναν ακέραιο (intValue), έναν αριθμό κινητής υποδιαστολής (floatValue) και έναν χαρακτήρα (charValue). Μόνο ένα από αυτά τα μέλη μπορεί να είναι ενεργό σε οποιοδήποτε δεδομένο σημείο λόγω της ικανότητας ενός σωματείου να μοιράζεται έναν χώρο μνήμης.

Μέσα στη συνάρτηση 'κύρια', δηλώνουμε ένα στιγμιότυπο της ένωσης που είναι 'myUnion'. Αρχικά, ορίζουμε την τιμή του ακέραιου μέλους στο 42 και χρησιμοποιούμε το 'cout' για να το εκτυπώσουμε. Στη συνέχεια, εκχωρούμε την τιμή κινητής υποδιαστολής 3,14 στο μέλος «floatValue» και το εκτυπώνουμε. Τέλος, εκχωρούμε τον χαρακτήρα «A» στο μέλος «charValue» και τον εκτυπώνουμε. Είναι σημαντικό να θυμάστε ότι εφόσον όλα τα μέλη της ένωσης μοιράζονται την ίδια θέση μνήμης, η αλλαγή ενός μέλους μπορεί να έχει αντίκτυπο στις αξίες των άλλων μελών. Ο κώδικας ολοκληρώνεται επιστρέφοντας 0 που σημαίνει μια επιτυχημένη εκτέλεση.

Παράδειγμα 2: Ένωση με Struc

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

Ακολουθεί ένα παράδειγμα χρήσης μιας ένωσης μέσα σε μια δομή στη C++:

#include

χρησιμοποιώντας το namespace std ;

struct Σημείο {

ενθ s1 ;

ενθ s2 ;

} ;

ένωση Σχήμα {

ενθ πλευρές ;

φλοτέρ ακτίνα κύκλου ;

Σημείο κέντρο ;

} ;

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

Σχήμα σχήματος ;

σχήμα. πλευρές = 5 ;
cout << 'Πλευρές: ' << σχήμα. πλευρές << endl ;

σχήμα. ακτίνα κύκλου = 6,0 στ ;
cout << 'Ακτίνα κύκλου: ' << σχήμα. ακτίνα κύκλου << endl ;

σχήμα. κέντρο = { 10 , είκοσι } ;
cout << 'Κέντρο: (' << σχήμα. κέντρο . s1 << ',' << σχήμα. κέντρο . s2 << ')' << endl ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Σε αυτόν τον κώδικα, ορίζουμε ένα πρόγραμμα C++ που χρησιμοποιεί μια ένωση και μια δομή για να αναπαραστήσει διαφορετικές πτυχές ενός γεωμετρικού σχήματος. Αρχικά, δηλώνουμε μια δομή «Σημείο» που αποτελείται από δύο ακέραια μέλη, «s1» και «s2», που αντιπροσωπεύουν τις συντεταγμένες ενός σημείου σε ένα 2D χώρο. Στη συνέχεια, ορίζουμε μια «ένωση» με το όνομα «Σχήμα» που αποτελείται από τρία μέλη: έναν ακέραιο «πλευρές», μια «ακτίνα» κινητής υποδιαστολής και μια δομή «Σημείο» που ονομάζεται «κέντρο». Προχωρώντας στη συνάρτηση 'κύρια', εγκαινιάζουμε ένα αντικείμενο 'Σχήμα' που ονομάζεται 'σχήμα'. Στη συνέχεια, δείχνουμε την ευελιξία της ένωσης αποδίδοντας τιμές στα διαφορετικά μέλη της. Αρχικά ορίζουμε τον αριθμό των πλευρών σε 5 και εκτυπώνουμε το αποτέλεσμα. Στη συνέχεια, εκχωρούμε μια ακτίνα 6,0 στο σχήμα και βγάζουμε την ακτίνα. Τέλος, ορίζουμε ένα κεντρικό σημείο με συντεταγμένες (10, 20) στο σχήμα και εκτυπώνουμε τις συντεταγμένες του κέντρου.

Παράδειγμα 3: Ένωση με Enum

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

Ιδού ένα παράδειγμα:

#include

χρησιμοποιώντας το namespace std ;

αρίθμηση Τύπος δεδομένων {

ΑΚΕΡΑΙΟΣ ΑΡΙΘΜΟΣ ,

ΦΛΟΤΕΡ ,

ΑΠΑΝΘΡΑΚΩΝΩ

} ;

ένωση Data Value {

ενθ intValue ;

φλοτέρ floatValue ;

απανθρακώνω charValue ;

} ;

struct Δεδομένα {

Τύπος DataType ;

Τιμή DataValue ;

} ;

ενθ κύριος ( )

{

Δεδομένα δεδομένων 1 , δεδομένα2 , δεδομένα 3 ;

δεδομένα 1. τύπος = ΑΚΕΡΑΙΟΣ ΑΡΙΘΜΟΣ ;
δεδομένα 1. αξία . intValue = 42 ;

δεδομένα2. τύπος = ΦΛΟΤΕΡ ;
δεδομένα2. αξία . floatValue = 3.14στ ;

δεδομένα 3. τύπος = ΑΠΑΝΘΡΑΚΩΝΩ ;
δεδομένα 3. αξία . charValue = 'ΕΝΑ' ;

cout << 'Δεδομένα 1:' << δεδομένα 1. αξία . intValue << endl ;
cout << 'Δεδομένα 2:' << δεδομένα2. αξία . floatValue << endl ;
cout << 'Δεδομένα 3:' << δεδομένα 3. αξία . charValue << endl ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Για αυτό το παράδειγμα, έχουμε ένα πρόγραμμα που χρησιμοποιεί enums, ενώσεις και structs για να δημιουργήσει μια ευέλικτη δομή δεδομένων που είναι ικανή να διατηρεί διαφορετικούς τύπους τιμών. Ο αριθμός 'DataType' ορίζεται να αντιπροσωπεύει τρεις βασικούς τύπους δεδομένων: ΑΚΕΡΑΙΟΣ, FLOAT και CHAR. Το enum ενισχύει την αναγνωσιμότητα και τη συντηρησιμότητα του κώδικα προσφέροντας ένα σύνολο ονομασμένων σταθερών ολοκλήρωσης.

Στη συνέχεια, κάνουμε μια ένωση που ονομάζεται 'DataValue' με τρία μέλη: 'charValue' τύπου char, 'floatValue' τύπου float και 'intValue' τύπου int. Με μια ένωση, αυτά τα μέλη μοιράζονται μια κοινή θέση μνήμης που επιτρέπει στην ένωση να ενσωματώνει εναλλακτικά τις τιμές διαφορετικών τύπων. Στη συνέχεια δημιουργείται η δομή «Δεδομένα» που αποτελείται από δύο μέλη: έναν απαριθμητή «Τύπος δεδομένων» με το όνομα «τύπος» και μια ένωση «τιμή δεδομένων» με το όνομα «τιμή». Αυτή η δομή μας επιτρέπει να συσχετίσουμε έναν τύπο δεδομένων με την αντίστοιχη τιμή του, παρέχοντας μια δομημένη αναπαράσταση.

Στη συνάρτηση 'κύρια', εγκαινιάζουμε τρεις περιπτώσεις της δομής 'Δεδομένα': 'data1', 'data2' και 'data3'. Εκχωρούμε τις τιμές σε αυτές τις περιπτώσεις καθορίζοντας τον τύπο δεδομένων και ορίζοντας την κατάλληλη τιμή εντός της ένωσης. Για παράδειγμα, στο 'data1' εκχωρείται ένας τύπος ΑΚΕΡΑΙΟΣ με τιμή 42. Τέλος, χρησιμοποιούμε τις δηλώσεις 'cout' για να εκτυπώσουμε τις τιμές που είναι αποθηκευμένες σε κάθε στιγμιότυπο 'Data'. Το πρόγραμμα εξάγει την ακέραια τιμή του 'data1', την τιμή κινητής υποδιαστολής του 'data2' και την τιμή χαρακτήρων του 'data3'.

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

συμπέρασμα

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