C++ Κλάση και αντικείμενο με Παράδειγμα
Τι είναι μια Τάξη;
A C++ Η κλάση συνδυάζει δεδομένα και μεθόδους για τον χειρισμό των δεδομένων σε ένα. Οι τάξεις καθορίζουν επίσης τις μορφές των αντικειμένων. Τα δεδομένα και οι μέθοδοι που περιέχονται σε μια κλάση είναι γνωστά ως μέλη κλάσης. Μια κλάση είναι ένας τύπος δεδομένων που ορίζεται από το χρήστη. Για να αποκτήσουμε πρόσβαση στα μέλη της τάξης, χρησιμοποιούμε μια παρουσία της κλάσης. Μπορείτε να δείτε μια κλάση ως σχεδιάγραμμα για ένα αντικείμενο.
Μια τάξη είναι ένα πρωτότυπο για ένα σπίτι. Δείχνει τη θέση και τα μεγέθη των θυρών, παραθύρων, δαπέδων κ.λπ. Από αυτές τις περιγραφές, μπορούμε να κατασκευάσουμε ένα σπίτι. Το σπίτι γίνεται αντικείμενο. Είναι δυνατό να δημιουργηθούν πολλά σπίτια από το πρωτότυπο. Επίσης, είναι δυνατή η δημιουργία πολλών αντικειμένων από μια κλάση.
Στο παραπάνω σχήμα, έχουμε ένα πρωτότυπο μονοκατοικίας. Από αυτό το πρωτότυπο, δημιουργήσαμε δύο σπίτια με διαφορετικά χαρακτηριστικά.
Δήλωση τάξης
Στη C+, μια κλάση ορίζεται χρησιμοποιώντας τη λέξη-κλειδί class. Αυτό θα πρέπει να ακολουθείται από το όνομα της τάξης. Στη συνέχεια, το σώμα της κλάσης προστίθεται ανάμεσα σε σγουρά άγκιστρα { }.
Σύνταξη
class class-name { // data // functions };
- Το όνομα κλάσης είναι το όνομα που πρέπει να εκχωρηθεί στην τάξη.
- Τα δεδομένα είναι τα δεδομένα για την κλάση, που συνήθως δηλώνονται ως μεταβλητές.
- Οι συναρτήσεις είναι οι συναρτήσεις κλάσης.
Ιδιωτικές και Δημόσιες Λέξεις-κλειδιά
Πρέπει να έχετε συναντήσει αυτές τις δύο λέξεις-κλειδιά. Είναι τροποποιητές πρόσβασης.
- Ιδιωτικός τομέας:
Όταν η ιδιωτική λέξη-κλειδί χρησιμοποιείται για τον ορισμό μιας συνάρτησης ή μιας κλάσης, γίνεται ιδιωτική. Αυτά είναι προσβάσιμα μόνο μέσα από την τάξη.
- Δημόσιο:
Η δημόσια λέξη-κλειδί, από την άλλη πλευρά, κάνει τα δεδομένα/λειτουργίες δημόσια. Αυτά είναι προσβάσιμα από έξω από την τάξη.
ορισμός αντικειμένου
Τα αντικείμενα δημιουργούνται από κλάσεις. Τα αντικείμενα κλάσης δηλώνονται με παρόμοιο τρόπο όπως δηλώνονται οι μεταβλητές. Το όνομα της κλάσης πρέπει να ξεκινά, ακολουθούμενο από το όνομα του αντικειμένου. Το αντικείμενο του τύπου κλάσης.
Σύνταξη
class-name object-name;
- Το class-name είναι το όνομα της κλάσης από την οποία πρόκειται να δημιουργηθεί ένα αντικείμενο.
- Το αντικείμενο-όνομα είναι το όνομα που θα εκχωρηθεί στο νέο αντικείμενο.
Αυτή η διαδικασία δημιουργίας ενός αντικειμένου από μια κλάση είναι γνωστή ως instantiation.
Πρόσβαση στα μέλη δεδομένων
Για πρόσβαση σε δημόσια μέλη μιας κλάσης, χρησιμοποιούμε τον τελεστή (.) dot. Αυτά είναι μέλη που επισημαίνονται με τροποποιητή δημόσιας πρόσβασης.
Παράδειγμα 1
#include <iostream> using namespace std; class Phone { public: double cost; int slots; }; int main() { Phone Y6; Phone Y7; Y6.cost = 100.0; Y6.slots = 2; Y7.cost = 200.0; Y7.slots = 2; cout << "Cost of Huawei Y6 : " << Y6.cost << endl; cout << "Cost of Huawei Y7 : " << Y7.cost << endl; cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl; cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl; return 0; }
Παραγωγή:
Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικά μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπερίληψη του χώρου ονομάτων std στον κώδικά μας για να χρησιμοποιήσουμε τις κλάσεις του χωρίς να τον καλέσουμε.
- Δηλώστε μια τάξη με το όνομα Phone.
- Χρησιμοποιώντας τον τροποποιητή δημόσιας πρόσβασης για να επισημάνουμε τις μεταβλητές που πρόκειται να δημιουργήσουμε ως δημόσια προσβάσιμες.
- Δηλώστε το μεταβλητό κόστος ενός διπλού τύπου δεδομένων.
- Δηλώστε μια ακέραια μεταβλητή με όνομα slots.
- Τέλος του σώματος της τάξης.
- Κλήση της συνάρτησης main(). Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα του.
- Δημιουργήστε ένα αντικείμενο με το όνομα Y6 τύπου Phone. Αυτό ονομάζεται instantiation.
- Δημιουργήστε ένα αντικείμενο με το όνομα Y7 τύπου Phone. Αυτό ονομάζεται instantiation.
- Πρόσβαση στη μεταβλητή/κόστος μέλους της κλάσης Phone χρησιμοποιώντας το αντικείμενο Y6. Η τιμή έχει οριστεί σε 100.0. Το κόστος του Y6 έχει πλέον οριστεί σε 100.0.
- Πρόσβαση στις υποδοχές μεταβλητών/μελών της κλάσης Phone χρησιμοποιώντας το αντικείμενο Y6. Η τιμή έχει οριστεί σε 2. Οι υποδοχές για το Y6 έχουν οριστεί τώρα στο 2.
- Πρόσβαση στη μεταβλητή/κόστος μέλους της κλάσης Phone χρησιμοποιώντας το αντικείμενο Y7. Η τιμή έχει οριστεί σε 200.0. Το κόστος του Y7 έχει πλέον οριστεί σε 200.0.
- Πρόσβαση στις υποδοχές μεταβλητών/μελών της κλάσης Phone χρησιμοποιώντας το αντικείμενο Y7. Η τιμή έχει οριστεί σε 2. Οι υποδοχές για το Y7 έχουν οριστεί τώρα στο 2.
- Εκτυπώστε το κόστος του Y6 στην κονσόλα μαζί με άλλο κείμενο.
- Εκτυπώστε το κόστος του Y7 στην κονσόλα μαζί με άλλο κείμενο.
- Εκτυπώστε τον αριθμό των υποδοχών για το Y6 μαζί με άλλο κείμενο.
- Εκτυπώστε τον αριθμό των υποδοχών για το Y7 μαζί με άλλο κείμενο.
- Το πρόγραμμα πρέπει να επιστρέψει μια τιμή μετά την επιτυχή ολοκλήρωση.
- Τέλος του σώματος της συνάρτησης main().
Τι είναι η ιδιωτική τάξη;
Τα μέλη κλάσης που έχουν επισημανθεί ως ιδιωτικά είναι προσβάσιμα μόνο από συναρτήσεις που ορίζονται εντός της κλάσης. Οποιοδήποτε αντικείμενο ή συνάρτηση ορίζεται εκτός της κλάσης δεν μπορεί να έχει απευθείας πρόσβαση σε αυτά τα μέλη. Ένα μέλος ιδιωτικής τάξης έχει πρόσβαση μόνο από λειτουργίες μέλους και φίλου.
Τι είναι η Προστατευόμενη Τάξη;
Τα μέλη της τάξης που έχουν επισημανθεί ως προστατευμένα έχουν ένα πλεονέκτημα έναντι αυτών που έχουν επισημανθεί ως ιδιωτικά. Μπορείτε να προσπελάσετε από συναρτήσεις εντός της κλάσης του ορισμού τους. Επιπλέον, μπορούν να προσπελαστούν από παράγωγες κλάσεις.
Παράδειγμα 2
#include <iostream> using namespace std; class ClassA { public: void set_a(int val); int get_a(void); private: int a; }; int ClassA::get_a(void) { return a; } void ClassA::set_a(int val) { a = val; } int main() { ClassA a; a.set_a(20); cout << "Value of a is: " << a.get_a(); return 0; }
Παραγωγή:
Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικά μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε τον χώρο ονομάτων std στον κώδικά μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να τον καλέσετε.
- Δημιουργήστε μια τάξη με το όνομα ClassA.
- Χρησιμοποιήστε τον τροποποιητή δημόσιας πρόσβασης για να επισημάνετε το μέλος κλάσης που θα δημιουργηθεί ως δημόσια προσβάσιμο.
- Δημιουργήστε τη συνάρτηση με το όνομα set_a() που παίρνει μια ακέραια τιμή val.
- Δημιουργήστε μια συνάρτηση με το όνομα get_a().
- Χρησιμοποιήστε τον τροποποιητή ιδιωτικής πρόσβασης για να επισημάνετε το μέλος κλάσης που θα δημιουργηθεί ως ιδιωτικά προσβάσιμο.
- Δηλώστε μια ακέραια μεταβλητή με όνομα a.
- Τέλος του σώματος της τάξης.
- Χρησιμοποιήστε το όνομα της κλάσης και τον τελεστή ανάλυσης πεδίου για πρόσβαση στη συνάρτηση get_a(). Θέλουμε να ορίσουμε τι κάνει η συνάρτηση όταν καλείται.
- Η συνάρτηση get_a() θα πρέπει να επιστρέψει την τιμή της μεταβλητής a όταν καλείται.
- Τέλος του ορισμού της συνάρτησης get_a().
- Χρησιμοποιήστε το όνομα της κλάσης και τον τελεστή ανάλυσης πεδίου για να αποκτήσετε πρόσβαση στη συνάρτηση set_a(). Θέλουμε να ορίσουμε τι κάνει η συνάρτηση όταν καλείται.
- Εκχώρηση της τιμής της μεταβλητής val στη μεταβλητή a.
- Τέλος ορισμού της συνάρτησης set_a().
- Καλέστε τη συνάρτηση main(). Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα αυτής της συνάρτησης.
- Δημιουργήστε μια παρουσία της ClassA και δώστε της το όνομα a.
- Χρησιμοποιήστε την παραπάνω παρουσία κλάσης και τη συνάρτηση set_a() για να εκχωρήσετε μια τιμή 20 στη μεταβλητή a.
- Εκτύπωση κειμένου μαζί με την τιμή της μεταβλητής a στην κονσόλα. Η τιμή της μεταβλητής a λαμβάνεται καλώντας τη συνάρτηση get_a().
- Το πρόγραμμα πρέπει να επιστρέψει τιμή μετά την επιτυχή ολοκλήρωση.
- Τέλος του σώματος της συνάρτησης main().
Παράδειγμα 3
#include <iostream> using namespace std; class ParentClass { protected: int value; }; class ChildClass : public ParentClass { public: void setId(int x) { value = x; } void displayValue() { cout << "Value is: " << value << endl; } }; int main() { ChildClass c; c.setId(21); c.displayValue(); return 0; }
Παραγωγή:
Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικά μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε τον χώρο ονομάτων std στον κώδικά μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να τον καλέσετε.
- Δημιουργήστε μια τάξη με το όνομα ParentClass.
- Χρησιμοποιήστε τον τροποποιητή προστατευμένης πρόσβασης για να επισημάνετε το μέλος κλάσης που θα δημιουργηθεί ως προστατευμένο.
- Δημιουργήστε μια ακέραια μεταβλητή με όνομα τιμή.
- Τέλος του σώματος της τάξης.
- Δημιουργήστε μια νέα κλάση με το όνομα ChildClass που κληρονομεί τη ParentClass.
- Χρησιμοποιήστε τον τροποποιητή προστατευμένης πρόσβασης για να επισημάνετε το μέλος κλάσης που θα δημιουργηθεί ως προσβάσιμο σε θυγατρικές κλάσεις.
- Δημιουργήστε τη συνάρτηση με το όνομα setId() που παίρνει μια ακέραια τιμή x.
- Εκχώρηση της τιμής της μεταβλητής x στην τιμή της μεταβλητής.
- Τέλος ορισμού της συνάρτησης setId().
- Δημιουργήστε μια συνάρτηση με το όνομα displayValue().
- Εκτυπώστε την τιμή της μεταβλητής με όνομα τιμή στην κονσόλα μαζί με άλλο κείμενο.
- Τέλος του σώματος της συνάρτησης displayValue().
- Τέλος του σώματος της τάξης με το όνομα ChildClass.
- Καλέστε τη συνάρτηση main(). Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα αυτής της συνάρτησης.
- Δημιουργήστε ένα στιγμιότυπο του ChildClass και δώστε του το όνομα c.
- Χρησιμοποιήστε την παραπάνω παρουσία κλάσης και τη συνάρτηση setId() για να εκχωρήσετε μια τιμή 21 στη μεταβλητή x.
- Χρησιμοποιήστε την παραπάνω παρουσία κλάσης για να καλέσετε τη συνάρτηση με το όνομα displayValue().
- Το πρόγραμμα πρέπει να επιστρέψει τιμή μετά την επιτυχή ολοκλήρωση.
- Τέλος του σώματος της συνάρτησης main().
Λειτουργίες μέλους τάξης
Οι συναρτήσεις μας βοηθούν να χειριζόμαστε δεδομένα. Οι συναρτήσεις μέλους κλάσης μπορούν να οριστούν με δύο τρόπους:
- Μέσα στον ορισμό της τάξης
- Εκτός του ορισμού της τάξης
Εάν μια συνάρτηση πρόκειται να οριστεί εκτός ορισμού κλάσης, πρέπει να χρησιμοποιήσουμε τον τελεστή ανάλυσης εύρους (::). Αυτό θα πρέπει να συνοδεύεται από τα ονόματα κλάσεων και συναρτήσεων.
Παράδειγμα 2
#include <iostream> #include <string> using namespace std; class Guru99 { public: string tutorial_name; int id; void printname(); void printid() { cout << "Tutorial id is: "<< id; } }; void Guru99::printname() { cout << "Tutorial name is: " << tutorial_name; } int main() { Guru99 guru99; guru99.tutorial_name = "C++"; guru99.id = 1001; guru99.printname(); cout << endl; guru99.printid(); return 0; }
Παραγωγή:
Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream στο πρόγραμμά μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας συμβολοσειράς στο πρόγραμμά μας για να χρησιμοποιήσετε τις συναρτήσεις του.
- Συμπεριλάβετε τον χώρο ονομάτων std στον κώδικά μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να τον καλέσετε.
- Δημιουργήστε μια τάξη με το όνομα Guru99.
- Χρησιμοποιήστε τον τροποποιητή δημόσιας πρόσβασης για να επισημάνετε τα μέλη της τάξης που πρόκειται να δημιουργήσουμε ως δημόσια προσβάσιμα.
- Δημιουργήστε μια μεταβλητή συμβολοσειράς με το όνομα tutorial_name.
- Δημιουργήστε μια ακέραια μεταβλητή με όνομα id.
- Δημιουργήστε μια συνάρτηση με το όνομα printname(). Αυτή η συνάρτηση δεν ορίζεται στον ορισμό της κλάσης.
- Δημιουργήστε μια συνάρτηση με το όνομα printed(). Αυτή η συνάρτηση ορίζεται στον ορισμό της κλάσης. Το σώμα του έχει προστεθεί στον ορισμό της κλάσης.
- Εκτυπώστε την τιμή της μεταβλητής id μαζί με άλλο κείμενο στην κονσόλα. Σημειώστε ότι αυτό έχει προστεθεί στο σώμα της συνάρτησης printid(). Θα εκτελεστεί μόνο όταν κληθεί η συνάρτηση printid().
- Τέλος του σώματος της συνάρτησης printid().
- Τέλος του αμαξώματος της κατηγορίας Guru99.
- Η αρχή του ορισμού της συνάρτησης printname().
- Εκτυπώστε την τιμή της μεταβλητής tutorial_name στην κονσόλα μαζί με άλλο κείμενο. Σημειώστε ότι αυτό έχει προστεθεί στο σώμα της συνάρτησης printname(). Θα εκτελεστεί μόνο όταν καλείται η συνάρτηση printname().
- Τέλος του ορισμού της συνάρτησης printname().
- Καλέστε τη συνάρτηση main(). Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα αυτής της συνάρτησης.
- Δημιουργήστε μια παρουσία της κλάσης Guru99 και δώστε της το όνομα guru99.
- Χρησιμοποιήστε την παραπάνω περίπτωση για να εκχωρήσετε μια τιμή του C++ στη μεταβλητή tutorial_name.
- Χρησιμοποιήστε την παρουσία guru99 για να εκχωρήσετε μια τιμή 1001 στο αναγνωριστικό της μεταβλητής.
- Χρησιμοποιήστε το instance guru99 για να καλέσετε τη συνάρτηση printname() .
- Καλέστε την εντολή end (end line) για να εκτυπώσετε μια νέα κενή γραμμή στην κονσόλα.
- Χρησιμοποιήστε το instance guru99 για να καλέσετε τη συνάρτηση printid().
- Το πρόγραμμα πρέπει να επιστρέψει τιμή μετά την επιτυχή ολοκλήρωση.
- Τέλος του σώματος της συνάρτησης main().
Κατασκευαστές και Καταστροφείς
Τι είναι οι Κατασκευαστές;
Οι κατασκευές είναι ειδικές συναρτήσεις που αρχικοποιούν αντικείμενα. ο C++ μεταγλωττιστές καλεί έναν κατασκευαστή όταν δημιουργεί ένα αντικείμενο. Οι κατασκευαστές βοηθούν στην εκχώρηση τιμών στα μέλη της κλάσης. Φυσικά, αυτό συμβαίνει αφού τους έχει εκχωρηθεί κάποιος χώρος στη μνήμη.
Τι είναι το Destructors;
Οι καταστροφείς από την άλλη βοηθούν στην καταστροφή αντικειμένων τάξης.
Το όνομα του κατασκευαστή πρέπει να είναι παρόμοιο με το όνομα της κλάσης. Οι κατασκευαστές δεν έχουν τύπο επιστροφής.
Ο κατασκευαστής μπορεί να οριστεί μέσα ή έξω από το σώμα της κλάσης. Εάν ορίζεται εκτός του σώματος της κλάσης, θα πρέπει να ορίζεται με το όνομα της κλάσης και τον τελεστή επίλυσης εύρους (::).
Παράδειγμα 3
#include <iostream> using namespace std; class ClassA { public: ClassA() { cout << "Class constructor called"<<endl; } ~ClassA() { cout << "Class destructor called"<<endl; } }; int main() { ClassA a; int p = 1; if (p) { ClassA b; } }
Παραγωγή:
Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικα για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε τον χώρο ονομάτων std στον κώδικά μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να τον καλέσετε.
- Δημιουργήστε μια τάξη με το όνομα ClassA.
- Χρησιμοποιήστε τον τροποποιητή δημόσιας πρόσβασης για να επισημάνετε το μέλος που πρόκειται να δημιουργήσουμε ως δημόσια προσβάσιμο.
- Δημιουργήστε έναν κατασκευαστή για την τάξη.
- Κείμενο προς εκτύπωση στην κονσόλα όταν καλείται ο κατασκευαστής. Το endl είναι α C++ λέξη-κλειδί, που σημαίνει τελική γραμμή. Μετακινεί τον κέρσορα του ποντικιού στην επόμενη γραμμή.
- Τέλος του σώματος του κατασκευαστή κλάσης.
- Δημιουργήστε έναν καταστροφέα για την τάξη.
- Κείμενο προς εκτύπωση στην κονσόλα όταν καλείται ο καταστροφέας. Το endl είναι α C++ λέξη-κλειδί, που σημαίνει τελική γραμμή. Μετακινεί τον κέρσορα του ποντικιού στην επόμενη γραμμή.
- Τέλος του σώματος του καταστροφέα.
- Τέλος του σώματος της τάξης.
- Καλέστε τη συνάρτηση main(). Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα αυτής της συνάρτησης.
- Δημιουργήστε ένα αντικείμενο κλάσης και δώστε του το όνομα a. Θα κληθεί ο κατασκευαστής.
- Δημιουργήστε μια ακέραια μεταβλητή με το όνομα p και ορίστε της μια τιμή 1.
- Δημιουργήστε ένα μπλοκ εντολών if χρησιμοποιώντας τη μεταβλητή p.
- Δημιουργήστε ένα αντικείμενο κλάσης και δώστε του το όνομα β. Θα κληθεί ο καταστροφέας.
- Τέλος του σώματος της δήλωσης if.
- Τέλος του σώματος της συνάρτησης main().
Περίληψη
- C++ είναι αντικειμενοστραφή.
- Οι τάξεις αποτελούν τα κύρια χαρακτηριστικά του C++ που το καθιστούν αντικειμενοστρεφές.
- A C++ Η κλάση συνδυάζει δεδομένα και μεθόδους για τον χειρισμό των δεδομένων σε ένα.
- Μια κλάση είναι ένα προσχέδιο για ένα αντικείμενο.
- Οι τάξεις καθορίζουν τη μορφή ενός αντικειμένου.
- Τα δεδομένα και οι μέθοδοι που περιέχονται σε μια κλάση είναι γνωστά ως μέλη κλάσης.
- Για να αποκτήσετε πρόσβαση σε μέλη της τάξης, θα πρέπει να χρησιμοποιήσετε μια παρουσία της τάξης.
- Για να δημιουργήσουμε μια τάξη, χρησιμοποιούμε τη λέξη-κλειδί class.
- Οι συναρτήσεις μέλους κλάσης μπορούν να οριστούν εντός ή εκτός μιας κλάσης.