Βίντεο: Writing 2D Games in C using SDL by Thomas Lively 2024
Τα πρότυπα δομών έχουν πολλές ενδιαφέρουσες χρήσεις, όπως η δημιουργία ενός χώρου αποθήκευσης δεδομένων που δεν εξαρτάται από συγκεκριμένο τύπο. Το παράδειγμα StructureTemplate εδώ δείχνει μία τέτοια χρήση.
#include χρησιμοποιώντας namespace std; πρότυπο δομή Όγκος {T ύψος; T πλάτος. T μήκος. Όγκος () {ύψος = 0; πλάτος = 0; length = 0,} T getvolume () {ύψος επιστροφής * πλάτος * μήκος ·} T getvolume (T H, T W, T L) {ύψος = H; πλάτος = W; μήκος = L; ύψος επιστροφής * πλάτος * μήκος ·}} · int main () {Όγκος πρώτα. cout << "πρώτος τόμος:" << πρώτα. getvolume () << endl; πρώτα. ύψος = 2; πρώτα. πλάτος = 3; πρώτα. μήκος = 4; cout << "πρώτος τόμος:" << πρώτα. getvolume () << endl; Όγκος δεύτερος. cout << "δεύτερο τόμο:" << δεύτερο. getvolume (2, 1, 3, 2, 4, 3) << endl; cout << "ύψος:" << δευτερόλεπτο. ύψος << endl; cout << "πλάτος:" << δεύτερο. πλάτος << endl; cout << "μήκος:" << δευτερόλεπτο. μήκος << endl; return 0;}
Σε αυτή την περίπτωση, η δομή περιέχει τιμές ύψους, πλάτους και μήκους που μπορεί να χρησιμοποιήσει ο κώδικας για τον προσδιορισμό του όγκου. Η δομή περιλαμβάνει έναν κατασκευαστή για την αρχικοποίηση των τιμών, οπότε ακόμα και αν κάποιος αποκαλεί getvolume () χωρίς να προετοιμάσει τη δομή, δεν θα συμβεί τίποτα κακό.
Η δομή επιτρέπει την ανεξάρτητη πρόσβαση κάθε τιμής δεδομένων. Μπορείτε να τα ορίσετε ή να τα πάρετε όπως είναι απαραίτητο.
Η λειτουργία getvolume () είναι υπερφορτωμένη. Μπορείτε να το καλέσετε με ή χωρίς τιμές εισόδου. Ο κώδικας στο main () ελέγχει προσεκτικά τη δομή. Ορίστε αυτό που βλέπετε ως έξοδο από αυτό το παράδειγμα:
Πρώτος όγκος: 0 Πρώτος όγκος: 24 Δεύτερος όγκος: 28. 896 Ύψος: 2. 1 Πλάτος: 3. 2 Μήκος: 4. 3
ένας άλλος ενδιαφέροντος σκοπός. Το πρότυπο C ++ λέει ότι δεν μπορείτε να δημιουργήσετε ένα πρότυπο typedef. Για παράδειγμα, ο ακόλουθος κώδικας δημιουργεί σφάλμα κατά την προσπάθειά σας να το συντάξετε:
πρότυπο typedef map MyDef;
Όταν προσπαθείτε να μεταγλωττίσετε αυτόν τον κώδικα στον Κωδικό:: Αποκλεισμός, βλέπετε το ακόλουθο σφάλμα:
σφάλμα: δήλωση προτύπου του "typedef"
Ωστόσο, μπορείτε να ορίσετε ένα typedef μέσα σε ένα πρότυπο δομής. Ο κώδικας υποδείγματος StructureTemplate2 εδώ δείχνει πώς.
#include #include using namespace std; πρότυπο struct MyDef {typpedef χάρτη Τύπος?}; int main () {MyDef:: Τύπος γάμων; γάμοι ["Tom"] = "Suzy"? γάμοι ["Harry"] = "Harriet"? cout << γάμοι ["Tom"] << endl; cout << γάμοι ["Harry"] << endl; return 0;}
Αυτό το παράδειγμα ξεπερνά τους περιορισμούς C ++ τοποθετώντας το typedef μέσα στο struct, MyDef. Η ίδια δομή μπορεί να κρατήσει οποιοδήποτε αριθμό typedef καταχωρήσεων.
Χρησιμοποιώντας ένα typedef με αυτό τον τρόπο διευκολύνεται η εργασία με το χάρτη.Το μόνο που χρειάζεται να ανησυχείτε είναι ο τύπος τιμής - ο τύπος κλειδιού ορίζεται ήδη ως συμβολοσειρά.