Τα “Access Specifiers” στη γλώσσα C++ είναι λέξεις-κλειδιά που χρησιμοποιούνται για τον έλεγχο της πρόσβασης σε μέλη (μεταβλητές και συναρτήσεις) μιας κλάσης. Υπάρχουν τρία είδη “Access Specifiers” στην C++: το “public”, το “private” και το “protected”.
Το “public” είναι ορίζει ότι τα μέλη μιας κλάσης είναι προσβάσιμα από οποιοδήποτε μέρος του προγράμματος. Αυτό σημαίνει ότι μπορούν να προσπελαστούν και να τροποποιηθούν από άλλες κλάσεις ή συναρτήσεις.
Το “private” ορίζει ότι τα μέλη είναι ιδιωτικά και δεν μπορούν να προσπελαστούν ή να τροποποιηθούν από κώδικα εκτός της κλάσης. Μόνο οι μέθοδοι της κλάσης μπορούν να έχουν πρόσβαση σε ιδιωτικά μέλη.
Το “protected” είναι παρόμοιο με το “private”, αλλά επιτρέπει την πρόσβαση σε μέλη από κλάσεις που κληρονομούν από την αρχική κλάση. Με άλλα λόγια, τα προστατευμένα μέλη είναι προσπελάσιμα μόνο από την κλάση και τις υποκλάσεις της.
Η χρήση των “Access Specifiers” είναι σημαντική για τον έλεγχο της πρόσβασης και της ασφάλειας του κώδικα, καθώς επιτρέπει την καλύτερη οργάνωση και την προστασία των δεδομένων μιας κλάσης.
Μέχρι τώρα, είστε αρκετά εξοικειωμένοι με τη δηλωτική λέξη public που εμφανίζεται σε όλα τα παραδείγματα κλάσεων:
class MyClass { // Ορίζουμε την κλάση public: // Δημόσια χαρακτηριστικά int x; // Χαρακτηριστικό void myMethod() { // Μέθοδος cout << "Hello World!"; } };
Τα “Access Specifiers” στη γλώσσα C++ είναι λέξεις-κλειδιά που χρησιμοποιούνται για να ρυθμίσουν την πρόσβαση σε μέλη (μεταβλητές και συναρτήσεις) μιας κλάσης. Στη C++ υπάρχουν τρία είδη “Access Specifiers”: το “public”, το “private” και το “protected”.
Το “public” ορίζει ότι τα μέλη μιας κλάσης είναι προσβάσιμα από οποιοδήποτε μέρος του προγράμματος. Αυτό σημαίνει ότι μπορούν να προσπελαστούν και να τροποποιηθούν από άλλες κλάσεις ή συναρτήσεις.
Το “private” ορίζει ότι τα μέλη είναι ιδιωτικά και δεν μπορούν να προσπελαστούν ή να τροποποιηθούν από κώδικα εκτός της κλάσης. Μόνο οι μέθοδοι της κλάσης έχουν πρόσβαση σε ιδιωτικά μέλη.
Το “protected” είναι παρόμοιο με το “private”, αλλά επιτρέπει την πρόσβαση σε μέλη από κλάσεις που κληρονομούν από την αρχική κλάση. Με άλλα λόγια, τα προστατευμένα μέλη είναι προσπελάσιμα μόνο από την κλάση και τις υποκλάσεις της.
Η χρήση των “Access Specifiers” είναι σημαντική για τον έλεγχο της πρόσβασης και την ασφάλεια του κώδικα, καθώς επιτρέπει την καλύτερη οργάνωση και προστασία των δεδομένων μιας κλάσης.
Για να δηλώσετε την πρόσβαση σε ένα χαρακτηριστικό ή μια μέθοδο, πρέπει να τοποθετήσετε τη δηλωτική λέξη πρόσβασης πριν από το χαρακτηριστικό ή τη μέθοδο:
class MyClass { public: // Δηλώνουμε δημόσια χαρακτηριστικά και μέθοδο int x; // Δημόσια μεταβλητή void myMethod() { cout << "Hello World!"; } // Δημόσια μέθοδος private: // Δηλώνουμε ιδιωτικό χαρακτηριστικό int y; // Ιδιωτική μεταβλητή }; int main() { MyClass myObj; // Δημιουργούμε ένα αντικείμενο της κλάσης MyClass myObj.x = 25; // Επιτρέπεται, γιατί το x είναι δημόσιο myObj.y = 50; // Δεν επιτρέπεται, γιατί το y είναι ιδιωτικό return 0; }
Ο παραπάνω κώδικας δημιουργεί μια κλάση με το όνομα MyClass
, η οποία περιέχει δύο μεταβλητές και μια μέθοδο. Οι μεταβλητές είναι x
και y
, ενώ η μέθοδος ονομάζεται myMethod
.
Οι μεταβλητές x
και y
έχουν διαφορετικά επίπεδα προσπέλασης. Η x
δηλώνεται ως δημόσια (public
), επομένως είναι προσπελάσιμη από τον κώδικα έξω από την κλάση. Αντίθετα, η y
δηλώνεται ως ιδιωτική (private
), άρα μπορεί να προσπελαστεί μόνο από μέθοδους της ίδιας της κλάσης.
Η μέθοδος myMethod
είναι μια απλή μέθοδος που εκτυπώνει το μήνυμα “Hello World!” χρησιμοποιώντας την cout
.
Στην main
συνάρτηση δημιουργείται ένα αντικείμενο της κλάσης MyClass
με το όνομα myObj
. Έπειτα, η μεταβλητή x
του αντικειμένου myObj
εκχωρείται η τιμή 25, καθώς είναι δημόσια και προσπελάσιμη. Ωστόσο, η μεταβλητή y
δεν μπορεί να αποκτήσει τιμή από τον κώδικα της main
, καθώς είναι ιδιωτική.
Τελικά, η main
συνάρτηση επιστρέφει την τιμή 0, υποδηλώνοντας ότι το πρόγραμμα ολοκληρώθηκε επιτυχώς.
Παράδειγμα:
#include <iostream> using namespace std; class MyClass { public: int x; // Δημόσια μεταβλητή void publicMethod() { cout << "This is a public method." << endl; } // Δημόσια μέθοδος private: int y; // Ιδιωτική μεταβλητή void privateMethod() { cout << "This is a private method." << endl; } // Ιδιωτική μέθοδος }; int main() { MyClass myObj; myObj.x = 25; // Επιτρέπεται, γιατί το x είναι δημόσιο myObj.publicMethod(); // Επιτρέπεται, γιατί η publicMethod είναι δημόσια // myObj.y = 50; // Δεν επιτρέπεται, γιατί το y είναι ιδιωτικό // myObj.privateMethod(); // Δεν επιτρέπεται, γιατί η privateMethod είναι ιδιωτική return 0; }
Ο παραπάνω κώδικας δημιουργεί μια κλάση με το όνομα MyClass
, η οποία περιέχει δημόσια και ιδιωτικά χαρακτηριστικά και μεθόδους.
Η κλάση έχει ένα δημόσιο χαρακτηριστικό με το όνομα x
, τύπου int
. Επίσης, περιλαμβάνει μια δημόσια μέθοδο με το όνομα publicMethod
, η οποία εκτυπώνει ένα μήνυμα.
Επιπλέον, η κλάση έχει ένα ιδιωτικό χαρακτηριστικό με το όνομα y
, τύπου int
. Υπάρχει επίσης μια ιδιωτική μέθοδος με το όνομα privateMethod
, η οποία εκτυπώνει ένα μήνυμα.
Στην συνάρτηση main
, δημιουργείται ένα αντικείμενο της κλάσης MyClass
με το όνομα myObj
. Στη συνέχεια, γίνεται η πρόσβαση στο δημόσιο χαρακτηριστικό x
του αντικειμένου και του ανατίθεται η τιμή 25. Επίσης, καλείται η δημόσια μέθοδος publicMethod()
, η οποία εκτυπώνει το μήνυμα “This is a public method.”.
Οι γραμμές που έχουν σχολιαστεί με //
δεν εκτελούνται, καθώς προσπαθούν να προσπελάσουν το ιδιωτικό χαρακτηριστικό y
και να καλέσουν την ιδιωτική μέθοδο privateMethod()
, τα οποία δεν είναι προσβάσιμα από τη συνάρτηση main
.