Οι δομές (struct) στη γλώσσα C++ είναι ένας τρόπος οργάνωσης και αποθήκευσης διαφορετικών τύπων δεδομένων σε έναν συνδυασμό. Μια δομή είναι ένα συλλογικός τύπος δεδομένων που μπορεί να περιέχει μεταβλητές διαφορετικών τύπων, όπως ακέραιες, δεκαδικές, χαρακτήρες και ακόμα και άλλες δομές.
Για να ορίσουμε μια δομή στη C++, χρησιμοποιούμε την λέξη-κλειδί struct
ακολουθούμενη από το όνομα της δομής και την περιγραφή των μεταβλητών που περιέχει μέσα σε άγκιστρα {}
.
Ένα παράδειγμα ορισμού μιας δομής στη C++ είναι το εξής:
struct Person { std::string name; int age; char gender; };
Στο παραπάνω παράδειγμα, δημιουργούμε μια δομή με το όνομα Person
, η οποία περιέχει τρεις μεταβλητές: μια συμβολοσειρά name
για το όνομα του ατόμου, έναν ακέραιο age
για την ηλικία και έναν χαρακτήρα gender
για το φύλο.
Οι δομές στη C++ μπορούν να χρησιμοποιηθούν για να δημιουργήσουμε πολλά αντικείμενα από μια δομή, τα οποία μπορούν να περιέχουν διαφορετικές τιμές για τις μεταβλητές που περιέχονται σε αυτήν. Η χρήση δομών μας επιτρέπει να οργανώνουμε και να διαχειριζόμαστε περίπλοκα δεδομένα με έναν ευανάγνωστο τρόπο.
Πρόσβαση στα μέλη μιας δομής
Ας υποθέσουμε ότι έχουμε την ακόλουθη δομή που αναπαριστά ένα προϊόν:
struct Product { int id; char name[100]; float price; };
Για να έχουμε πρόσβαση στα μέλη αυτής της δομής, μπορούμε να χρησιμοποιήσουμε τη σύνταξη τελείας (.). Ας δούμε ένα παράδειγμα:
#include <stdio.h> // Ορισμός της δομής "Product" struct Product { int id; char name[100]; float price; }; int main() { struct Product prod; // Ανάθεση τιμών στα μέλη της δομής prod.id = 1; // Ανάθεση τιμής 1 στο μέλος "id" strcpy(prod.name, "Κινητό τηλέφωνο"); // Αντιγραφή της συμβολοσειράς "Κινητό τηλέφωνο" στο μέλος "name" prod.price = 299.99; // Ανάθεση τιμής 299.99 στο μέλος "price" // Εκτύπωση των μελών της δομής printf("ID: %d\n", prod.id); // Εκτύπωση της τιμής του μέλους "id" printf("Όνομα: %s\n", prod.name); // Εκτύπωση της τιμής του μέλους "name" printf("Τιμή: %.2f\n", prod.price); // Εκτύπωση της τιμής του μέλους "price" return 0; }
Σε αυτό το παράδειγμα, δημιουργούμε μια μεταβλητή prod
τύπου struct Product
. Έπειτα, χρησιμοποιούμε τη σύνταξη τελείας για να αναθέσουμε τιμές στα μέλη της δομής. Τέλος, εκτυπώνουμε τα μέλη της δομής χρησιμοποιώντας πάλι τη σύνταξη τελείας.
Παραδείγματα δομών στη C++
Ας δούμε ένα παράδειγμα δομής στη C++ που ορίζει ένα βιβλίο με τα χαρακτηριστικά του τίτλου, του συγγραφέα, της εκδόσης και του αριθμού σελίδων:
#include <iostream> #include <string> using namespace std; struct Book { string title; string author; int edition; int pages; }; int main() { // Δημιουργία ενός αντικειμένου τύπου Book Book myBook; // Ανάθεση τιμών στα πεδία του αντικειμένου myBook myBook.title = "The Catcher in the Rye"; myBook.author = "J.D. Salinger"; myBook.edition = 1; myBook.pages = 224; // Εκτύπωση των πεδίων του αντικειμένου myBook cout << "Title: " << myBook.title << endl; cout << "Author: " << myBook.author << endl; cout << "Edition: " << myBook.edition << endl; cout << "Pages: " << myBook.pages << endl; return 0; }
[adinserter block=”2″]
Ο κώδικας αυτός δημιουργεί έναν δομημένο τύπο δεδομένων με όνομα Book
, ο οποίος περιέχει τέσσερα πεδία: title
(τίτλος), author
(συγγραφέας), edition
(έκδοση) και pages
(σελίδες).
Στη συνέχεια, στη συνάρτηση main
, δημιουργείται ένα αντικείμενο myBook
τύπου Book
. Οι τιμές των πεδίων του αντικειμένου ανατίθενται μεμονωμένα. Έπειτα, τα πεδία του αντικειμένου εκτυπώνονται στην οθόνη χρησιμοποιώντας την εντολή cout
.
Η έξοδος του προγράμματος θα είναι:
Title: The Catcher in the Rye Author: J.D. Salinger Edition: 1 Pages: 224
Μία δομή σε πολλές μεταβλητές
Μπορείτε να χρησιμοποιήσετε το κόμμα (,) για να χρησιμοποιήσετε μια δομή σε πολλές μεταβλητές:
Person person1, person2, person3; person1.name = "John Smith"; person2.name = "Mary Johnson"; person3.name = "Bob Johnson";
Στο παραπάνω παράδειγμα, δημιουργούμε τρεις μεταβλητές δομής με το όνομα person1
, person2
και person3
. Χρησιμοποιούμε το κόμμα για να ορίσουμε πολλές μεταβλητές της ίδιας δομής στην ίδια γραμμή κώδικα. Στη συνέχεια, χρησιμοποιούμε τη σύνταξη τελείας για να έχουμε πρόσβαση στο όνομα της κάθε μεταβλητής δομής και να τους δώσουμε τιμές.
Αυτό το παράδειγμα δείχνει πώς να χρησιμοποιήσετε μια δομή σε δύο διαφορετικές μεταβλητές:
#include <iostream> #include <string> using namespace std; struct Person { string name; int age; }; int main() { Person person1; // Δημιουργία αντικειμένου τύπου Person με το όνομα person1 person1.name = "John Smith"; // Ανάθεση τιμής "John Smith" στη μεταβλητή name του αντικειμένου person1 person1.age = 25; // Ανάθεση τιμής 25 στη μεταβλητή age του αντικειμένου person1 Person person2 = person1; // Δημιουργία νέου αντικειμένου person2 και ανάθεση των τιμών του person1 cout << "Person 1" << endl; // Εκτύπωση μηνύματος "Person 1" στην οθόνη cout << "Name: " << person1.name << endl; // Εκτύπωση της μεταβλητής name του person1 cout << "Age: " << person1.age << endl << endl; // Εκτύπωση της μεταβλητής age του person1, με κενή γραμμή μετά cout << "Person 2" << endl; // Εκτύπωση μηνύματος "Person 2" στην οθόνη cout << "Name: " << person2.name << endl; // Εκτύπωση της μεταβλητής name του person2 cout << "Age: " << person2.age << endl; // Εκτύπωση της μεταβλητής age του person2 return 0; // Επιστροφή της τιμής 0 για ομαλή ολοκλήρωση του προγράμματος }
Ο παραπάνω κώδικας σε C δημιουργεί δύο αντικείμενα τύπου Person
και τα εκτυπώνει στην οθόνη. Ας αναλύσουμε τα βήματα:
- Πρώτα, περιλαμβάνονται οι κατάλληλες βιβλιοθήκες,
iostream
καιstring
, για την επεξεργασία των εισόδων/εξόδων και των αλφαριθμητικών αντίστοιχα. - Ορίζεται η δομή
Person
που περιλαμβάνει δύο μεταβλητές, τηname
τύπουstring
και τηage
τύπουint
. Η δομή αυτή περιέχει πληροφορίες για ένα άτομο. - Στην συνάρτηση
main
, δημιουργείται ένα αντικείμενοperson1
τύπουPerson
. Αναθέτουμε στη μεταβλητήname
τουperson1
την τιμή “John Smith” και στη μεταβλητήage
την τιμή 25. - Έπειτα, δημιουργείται ένα δεύτερο αντικείμενο
person2
τύπουPerson
και του ανατίθενται οι τιμές τουperson1
. - Τέλος, εκτυπώνονται στην οθόνη τα περιεχόμενα των αντικειμένων
person1
καιperson2
, που περιλαμβάνουν τα ονόματα και τις ηλικίες των ατόμων.
Ο κώδικας αυτός επιδεικνύει τη χρήση δομής (struct
) για την οργάνωση δεδομένων και τη δημιουργία αντικειμένων από αυτήν τη δομή.
Το αποτέλεσμα που εμφανίζεται στην οθόνη είναι το εξής:
Person 1 Name: John Smith Age: 25 Person 2 Name: John Smith Age: 25
Ο κώδικας εκτυπώνει τις πληροφορίες των δύο αντικειμένων τύπου Person
. Τόσο ο person1
όσο και ο person2
έχουν τις ίδιες τιμές για το όνομα και την ηλικία, καθώς ο person2
ανατίθεται με βάση τις τιμές του person1
.
Παράδειγμα
#include <iostream> #include <string> using namespace std; // Δήλωση της δομής Person που περιέχει το όνομα και την ηλικία struct Person { string name; int age; } person1, person2; int main() { // Ανάθεση τιμών στις μεταβλητές των αντικειμένων person1 και person2 person1.name = "John Smith"; person1.age = 25; person2.name = "Mary Johnson"; person2.age = 32; // Εκτύπωση πληροφοριών για το πρόσωπο 1 cout << "Person 1" << endl; cout << "Name: " << person1.name << endl; cout << "Age: " << person1.age << endl << endl; // Εκτύπωση πληροφοριών για το πρόσωπο 2 cout << "Person 2" << endl; cout << "Name: " << person2.name << endl; cout << "Age: " << person2.age << endl; return 0; }
Ο παραπάνω κώδικας πραγματοποιεί τις παρακάτω ενέργειες:
- Αρχικά, γίνεται η συμπερίληψη των απαραίτητων βιβλιοθηκών
<iostream>
και<string>
. Η βιβλιοθήκη<iostream>
παρέχει την πρόσβαση στις δυνατότητες εισόδου/εξόδου της γλώσσας C++, ενώ η βιβλιοθήκη<string>
παρέχει τη δυνατότητα χρήσης των αλφαριθμητικών της C++. - Στη συνέχεια, ορίζεται μια δομή με όνομα
Person
, η οποία περιέχει δύο μέλη: ένα αλφαριθμητικόname
και έναν ακέραιοage
. - Δημιουργούνται δύο αντικείμενα της δομής
Person
με τα ονόματαperson1
καιperson2
. - Ορίζονται και αναθέτονται τιμές στα μέλη των αντικειμένων
person1
καιperson2
με χρήση του τελεστή.
. - Εκτυπώνονται πληροφορίες για κάθε πρόσωπο, όπως το όνομα και η ηλικία, χρησιμοποιώντας τη συνάρτηση
cout
και τον τελεστή<<
. - Το πρόγραμμα τελειώνει και επιστρέφει την τιμή 0, με την εντολή
return 0
, υποδεικνύοντας ότι το πρόγραμμα ολοκληρώθηκε επιτυχώς.
Συνολικά, ο κώδικας δημιουργεί και εμφανίζει πληροφορίες για δύο πρόσωπα.
Όταν εκτελέσετε τον παραπάνω κώδικα, θα προκύψει το ακόλουθο αποτέλεσμα στην οθόνη:
Person 1 Name: John Smith Age: 25 Person 2 Name: Mary Johnson Age: 32
Ο κώδικας εκτυπώνει το όνομα και την ηλικία των δύο προσώπων σε διαδοχικές γραμμές, με κατάλληλες κενές γραμμές για αρθρώσεις μεταξύ των πληροφοριών κάθε προσώπου.