Σε αυτό το σεμινάριο, θα μάθουμε για τον κατασκευαστή C ++ και τον τύπο του με τα παραδείγματα βοήθειας.
Ένας κατασκευαστής είναι ένας ειδικός τύπος συνάρτησης μέλους που καλείται αυτόματα όταν δημιουργείται ένα αντικείμενο.
Στο C ++, ένας κατασκευαστής έχει το ίδιο όνομα με αυτό της κλάσης και δεν έχει τύπο επιστροφής. Για παράδειγμα,
class Wall ( public: // create a constructor Wall() ( // code ) );
Εδώ, η συνάρτηση Wall()
είναι κατασκευαστής της κλάσης Wall
. Παρατηρήστε ότι ο κατασκευαστής
- έχει το ίδιο όνομα με την τάξη,
- δεν έχει τύπο επιστροφής και
- είναι
public
Προεπιλεγμένος κατασκευαστής C ++
Ένας κατασκευαστής χωρίς παραμέτρους είναι γνωστός ως προεπιλεγμένος κατασκευαστής . Στο παραπάνω παράδειγμα, Wall()
είναι ένας προεπιλεγμένος κατασκευαστής.
Παράδειγμα 1: Προεπιλεγμένος κατασκευαστής C ++
// C++ program to demonstrate the use of default constructor #include using namespace std; // declare a class class Wall ( private: double length; public: // create a constructor Wall() ( // initialize private variables length = 5.5; cout << "Creating a wall." << endl; cout << "Length = " << length << endl; ) ); int main() ( // create an object Wall wall1; return 0; )
Παραγωγή:
Δημιουργία μήκους τοίχου = 5.5
Εδώ, όταν δημιουργείται το αντικείμενο wall1, Wall()
καλείται ο κατασκευαστής. Αυτό ορίζει τη μεταβλητή μήκους του αντικειμένου 5.5
.
Σημείωση: Εάν δεν έχουμε ορίσει έναν κατασκευαστή στην τάξη μας, ο μεταγλωττιστής C ++ θα δημιουργήσει αυτόματα έναν προεπιλεγμένο κατασκευαστή με έναν κενό κωδικό και χωρίς παραμέτρους.
Παράμετρος Κατασκευαστής C ++
Στο C ++, ένας κατασκευαστής με παραμέτρους είναι γνωστός ως παραμετροποιημένος κατασκευαστής. Αυτή είναι η προτιμώμενη μέθοδος για την αρχικοποίηση δεδομένων μελών.
Παράδειγμα 2: Παραμετροποιημένος Κατασκευαστής C ++
// C++ program to calculate the area of a wall #include using namespace std; // declare a class class Wall ( private: double length; double height; public: // create parameterized constructor Wall(double len, double hgt) ( // initialize private variables length = len; height = hgt; ) double calculateArea() ( return length * height; ) ); int main() ( // create object and initialize data members Wall wall1(10.5, 8.6); Wall wall2(8.5, 6.3); cout << "Area of Wall 1: " << wall1.calculateArea() << endl; cout << "Area of Wall 2: " << wall2.calculateArea() << endl; return 0; )
Παραγωγή:
Περιοχή Τείχους 1: 90.3 Περιοχή Τείχους 2: 53.55
Εδώ, δημιουργήσαμε έναν παραμετροποιημένο κατασκευαστή Wall()
που έχει 2 παραμέτρους: double len
και double hgt
. Οι τιμές που περιέχονται σε αυτές τις παραμέτρους χρησιμοποιούνται για να αρχικοποιήσουν τις μεταβλητές μέλους μήκος και ύψος.
Όταν δημιουργούμε ένα αντικείμενο της Room
κλάσης, μεταβιβάζουμε τις τιμές για τις μεταβλητές μέλους ως ορίσματα. Ο κωδικός για αυτό είναι:
Wall wall1(10.5, 8.6); Wall wall2(8.5, 6.3);
Με τις μεταβλητές μελών που έχουν αρχικοποιηθεί, μπορούμε τώρα να υπολογίσουμε την περιοχή του τοίχου με τη calculateArea()
συνάρτηση.
Κατασκευαστής αντιγραφής C ++
Ο κατασκευαστής αντιγράφων στο C ++ χρησιμοποιείται για την αντιγραφή δεδομένων ενός αντικειμένου σε άλλο.
Παράδειγμα 3: Κατασκευαστής αντιγραφής C ++
#include using namespace std; // declare a class class Wall ( private: double length; double height; public: // parameterized constructor Wall(double len, double hgt) ( // initialize private variables length = len; height = hgt; ) // copy constructor with a Wall object as parameter Wall(Wall &obj) ( // initialize private variables length = obj.length; height = obj.height; ) double calculateArea() ( return length * height; ) ); int main() ( // create an object of Wall class Wall wall1(10.5, 8.6); // print area of wall1 cout << "Area of Room 1: " << wall1.calculateArea() << endl; // copy contents of room1 to another object room2 Wall wall2 = wall1; // print area of wall2 cout << "Area of Room 2: " << wall2.calculateArea() << endl; return 0; )
Παραγωγή
Περιοχή δωματίου 1: 90.3 Περιοχή δωματίου 2: 90.3
Σε αυτό το πρόγραμμα, χρησιμοποιήσαμε έναν κατασκευαστή αντιγράφων για να αντιγράψουμε τα περιεχόμενα ενός αντικειμένου της Wall
κλάσης σε ένα άλλο. Ο κωδικός του κατασκευαστή αντιγράφων είναι:
Room(Room &obj) ( length = obj.length; height = obj.height; )
Παρατηρήστε ότι η παράμετρος αυτού του κατασκευαστή έχει τη διεύθυνση ενός αντικειμένου της Wall
κλάσης.
Στη συνέχεια αντιστοιχίζουμε τις τιμές των μεταβλητών του πρώτου αντικειμένου στις αντίστοιχες μεταβλητές του δεύτερου αντικειμένου. Έτσι αντιγράφεται το περιεχόμενο του αντικειμένου.
Στη main()
συνέχεια, δημιουργούμε δύο αντικείμενα wall1 και wall2 και στη συνέχεια αντιγράφουμε τα περιεχόμενα του πρώτου αντικειμένου στο δεύτερο με τον κωδικό
Wall wall2 = wall1;
Σημείωση : Ένας κατασκευαστής χρησιμοποιείται κυρίως για την προετοιμασία αντικειμένων. Χρησιμοποιούνται επίσης για την εκτέλεση ενός προεπιλεγμένου κώδικα κατά τη δημιουργία ενός αντικειμένου.