Οι constructors (κατασκευαστές) στη γλώσσα C++ είναι ειδικές μέθοδοι που χρησιμοποιούνται για την αρχικοποίηση των αντικειμένων μιας κλάσης. Ονομάζονται constructors επειδή χρησιμοποιούνται για την κατασκευή (construction) των αντικειμένων.
Ο constructor ορίζεται με το ίδιο όνομα με την κλάση και δεν έχει επιστροφικό τύπο. Μπορεί να έχει παραμέτρους και να περιλαμβάνει κώδικα για την αρχικοποίηση των μελών της κλάσης. Όταν δημιουργείται ένα αντικείμενο της κλάσης, ο constructor καλείται αυτόματα για να εκτελέσει τις απαραίτητες ενέργειες αρχικοποίησης.
Οι constructors μπορούν να χρησιμοποιηθούν για να αρχικοποιήσουν τις μελέτες της κλάσης με τιμές προκαθορισμένες ή με τιμές που παρέχονται ως παράμετροι κατά τη δημιουργία του αντικειμένου. Αυτό μας επιτρέπει να δημιουργήσουμε αντικείμενα με προκαθορισμένη κατάσταση και να προσαρμόσουμε τη συμπεριφορά της κλάσης ανάλογα με τις απαιτήσεις μας.
Οι constructors αποτελούν σημαντικό μέρος του αντικειμενοστραφούς προγραμματισμού στην C++ και μας επιτρέπουν να δημιουργούμε και να αρχικοποιούμε αντικείμενα με ευκολία και ευελιξία.
Για να δημιουργήσετε έναν κατασκευαστή, χρησιμοποιήστε το ίδιο όνομα με την κλάση, ακολουθούμενο από παρενθέσεις ():
#include <iostream> using namespace std; class MyClass { // Ορίζουμε την κλάση public: // Δημόσια χαρακτηριστικά MyClass() { // Δηλώνουμε τον κατασκευαστή cout << "Hello World!"; // Εκτύπωση κειμένου "Hello World!" } }; int main() { MyClass myObj; // Δημιουργούμε ένα αντικείμενο της κλάσης return 0; }
Ο παραπάνω κώδικας σε C++ ορίζει μια κλάση με όνομα MyClass
και έχει έναν δημόσιο κατασκευαστή MyClass()
. Ο κατασκευαστής αυτός εκτελείται όταν δημιουργείται ένα αντικείμενο της κλάσης MyClass
και εκτελεί την εντολή cout << "Hello World!";
, η οποία εμφανίζει το μήνυμα “Hello World!” στην οθόνη.
Στη συνέχεια, στην main()
συνάρτηση, δημιουργείται ένα αντικείμενο myObj
της κλάσης MyClass
, με τη γραμμή κώδικα MyClass myObj;
. Αυτό έχει ως αποτέλεσμα την εκτέλεση του κατασκευαστή MyClass()
, με αποτέλεσμα την εμφάνιση του μηνύματος “Hello World!” στην οθόνη κατά την εκτέλεση του προγράμματος.
Τελικά, το πρόγραμμα επιστρέφει την τιμή 0 με τη γραμμή κώδικα return 0;
, υποδηλώνοντας ότι το πρόγραμμα ολοκληρώθηκε με επιτυχία.
[adinserter block=”2″]
Η παρακάτω κλάση έχει τα χαρακτηριστικά μάρκας, μοντέλου και έτους, και έναν κατασκευαστή με διαφορετικές παραμέτρους. Μέσα στον κατασκευαστή, ορίζουμε τα χαρακτηριστικά ίσα με τις παραμέτρους του κατασκευαστή (brand=x, κλπ). Όταν καλούμε τον κατασκευαστή (δημιουργώντας ένα αντικείμενο της κλάσης), δίνουμε παραμέτρους στον κατασκευαστή, οι οποίες θα ορίσουν την τιμή των αντίστοιχων χαρακτηριστικών:
#include <iostream> using namespace std; class Car { public: string brand; // Μεταβλητή για τη μάρκα του αυτοκινήτου string model; // Μεταβλητή για το μοντέλο του αυτοκινήτου int year; // Μεταβλητή για το έτος του αυτοκινήτου Car(string x, string y, int z) { // Ο κατασκευαστής της κλάσης Car που αρχικοποιεί τις μεταβλητές brand = x; model = y; year = z; } }; int main() { Car myCar("BMW", "X5", 1999); // Δημιουργία αντικειμένου της κλάσης Car και κλήση του κατασκευαστή με παραμέτρους cout << myCar.brand << " " << myCar.model << " " << myCar.year << endl; // Εκτύπωση των δεδομένων του αυτοκινήτου return 0; }
Ο παραπάνω κώδικας δημιουργεί μια κλάση με το όνομα “Car” που αναπαριστά ένα αυτοκίνητο. Η κλάση έχει τρία δημόσια χαρακτηριστικά: “brand” (μάρκα), “model” (μοντέλο) και “year” (έτος).
Ο κώδικας περιλαμβάνει έναν κατασκευαστή (constructor) για την κλάση Car, ο οποίος δέχεται τρεις παραμέτρους: μια συμβολοσειρά για τη μάρκα, μια συμβολοσειρά για το μοντέλο και έναν ακέραιο αριθμό για το έτος. Ο κατασκευαστής αρχικοποιεί τα χαρακτηριστικά “brand”, “model” και “year” της κλάσης με τις τιμές που περνιούνται ως παράμετροι.
Στη συνέχεια, στη συνάρτηση main(), δημιουργείται ένα αντικείμενο της κλάσης Car με τη χρήση του κατασκευαστή. Οι παράμετροι που περνιούνται στον κατασκευαστή είναι η μάρκα “BMW”, το μοντέλο “X5” και το έτος 1999.
Τέλος, εκτυπώνονται τα δεδομένα του αυτοκινήτου με τη χρήση του αντικειμένου myCar. Αυτό σημαίνει ότι εκτυπώνονται η μάρκα, το μοντέλο και το έτος του αυτοκινήτου, που στην περίπτωση μας είναι “BMW X5 1999”.
Όπως και με τις συναρτήσεις, οι κατασκευαστές μπορούν να οριστούν εντός ή εκτός της κλάσης. Αρχικά, μπορούμε να δηλώσουμε τον κατασκευαστή εντός της κλάσης, με τη χρήση του ίδιου ονόματος κλάσης. Στη συνέχεια, μπορούμε να ορίσουμε τον κατασκευαστή εκτός της κλάσης, αναφερόμενοι στο όνομα της κλάσης ακολουθούμενο από τον τελεστή επίλυσης εύρους “::” και το όνομα του κατασκευαστή.
Ένα παράδειγμα θα ήταν:
#include <iostream> using namespace std; class MyClass { public: int num; MyClass(); // Δήλωση του κατασκευαστή εντός της κλάσης }; MyClass::MyClass() { num = 0; } int main() { MyClass obj; // Δημιουργία αντικειμένου της κλάσης με τον κατασκευαστή cout << obj.num << endl; // Εκτύπωση της τιμής του μέλους num του αντικειμένου return 0; }
Στο παράδειγμα αυτό, ο κατασκευαστής MyClass
δηλώνεται εντός της κλάσης με τη γραμμή MyClass();
. Έπειτα, εκτός της κλάσης, ο κατασκευαστής ορίζεται με τη χρήση του ονόματος της κλάσης ακολουθούμενο από τον τελεστή επίλυσης εύρους ::
. Στην υλοποίηση του κατασκευαστή, αναθέτουμε την τιμή 0 στο μέλος num
.
Παράδεγμα:
#include <iostream> using namespace std; class Car { // Ορίζουμε την κλάση public: // Δημόσια χαρακτηριστικά string brand; string model; int year; Car(string x, string y, int z); // Δηλώνουμε τον κατασκευαστή }; // Ορίζουμε τον κατασκευαστή έξω από την κλάση με τη χρήση της σύνταξης επίλυσης εύρους Car::Car(string x, string y, int z) { brand = x; model = y; year = z; } int main() { Car myCar("BMW", "X5", 1999); // Δημιουργούμε ένα αντικείμενο της κλάσης και δίνουμε παραμέτρους στον κατασκευαστή cout << myCar.brand << " " << myCar.model << " " << myCar.year << endl; return 0; }
Ο παραπάνω κώδικας δημιουργεί μια κλάση με το όνομα “Car” που περιγράφει ένα αυτοκίνητο. Η κλάση έχει τρία δημόσια χαρακτηριστικά: τη μάρκα (brand), το μοντέλο (model) και το έτος κυκλοφορίας (year).
Ορίζεται επίσης ο κατασκευαστής (constructor) της κλάσης, ο οποίος δέχεται τρεις παραμέτρους: μια συμβολοσειρά για τη μάρκα, μια συμβολοσειρά για το μοντέλο και έναν ακέραιο αριθμό για το έτος κυκλοφορίας. Ο κατασκευαστής αναθέτει τις παραμέτρους στα αντίστοιχα μέλη δεδομένων της κλάσης.
Στην κύρια συνάρτηση main
, δημιουργείται ένα αντικείμενο με τη χρήση του κατασκευαστή της κλάσης Car
. Οι παράμετροι που περνούνται στον κατασκευαστή είναι η μάρκα “BMW”, το μοντέλο “X5” και το έτος κυκλοφορίας 1999. Έπειτα, με τη χρήση της εντολής cout
, εκτυπώνονται οι πληροφορίες του αυτοκινήτου (μάρκα, μοντέλο, έτος) στην οθόνη.
Συνολικά, ο κώδικας δημιουργεί ένα αντικείμενο της κλάσης Car
και εμφανίζει τις πληροφορίες του αυτοκινήτου στην οθόνη.