Junior
Τι γνωρίζετε για τις στατικές και μη στατικές μεθόδους;
sobes.tech AI
Απάντηση από AI
Οι σταθερές μέθοδοι (const methods) σε C++ είναι μέθοδοι κλάσης που δηλώνονται με τη λέξη-κλειδί const μετά από τη λίστα παραμέτρων.
class MyClass {
public:
void nonConstMethod(); // Μη σταθερή μέθοδος
void constMethod() const; // Σταθερή μέθοδος
};
Η λέξη-κλειδί const μετά από τη λίστα παραμέτρων εγγυάται ότι η μέθοδος δεν θα αλλάξει την κατάσταση του αντικειμένου στο οποίο καλείται. Αυτό σημαίνει ότι μέσα σε μια σταθερή μέθοδο:
- Δεν μπορούν να τροποποιηθούν τα μη στατικά μέλη δεδομένων του αντικειμένου.
- Μπορούν να καλούνται μόνο άλλες σταθερές μεθόδοι του ίδιου αντικειμένου.
Σκοπός των σταθερών μεθόδων:
- Ασφάλεια: Προλαμβάνουν τυχαίες αλλαγές στην κατάσταση του αντικειμένου.
- Χρήση με σταθερά αντικείμενα: Τα σταθερά αντικείμενα (που δηλώνονται με
const) μπορούν να καλούν μόνο σταθερές μεθόδους. Οι μη σταθερές μέθοδοι δεν είναι προσβάσιμες σε αυτά. - Υπερφόρτωση: Οι μέθοδοι μπορούν να υπερφορτωθούν κατά constness. Αυτό επιτρέπει να υπάρχουν δύο μέθοδοι με το ίδιο όνομα και υπογραφή παραμέτρων, αλλά η μία θα είναι σταθερή και η άλλη όχι. Ο μεταγλωττιστής θα επιλέξει την κατάλληλη έκδοση ανάλογα με το αν καλείται σε σταθερό ή μη σταθερό αντικείμενο.
class MyClass {
int value;
public:
int getValue() const { // Σταθερή έκδοση
return value;
}
int getValue() { // Μη σταθερή έκδοση
return value++; // Δυνατότητα αλλαγής της κατάστασης
}
};
void test(const MyClass& objConst, MyClass& objNonConst) {
objConst.getValue(); // Κλήση στη σταθερή έκδοση
objNonConst.getValue(); // Κλήση στη μη σταθερή έκδοση
}
Μη σταθερές μέθοδοι:
Αυτές είναι συνηθισμένες μέθοδοι της κλάσης που μπορούν να αλλάξουν την κατάσταση του αντικειμένου. Δηλώνονται χωρίς τη λέξη-κλειδί const μετά από τη λίστα παραμέτρων.
Χρήση:
| Τύπος αντικειμένου | Κλήση μεθόδου | Ποια μέθοδος θα κληθεί | Επεξήγηση |
|---|---|---|---|
const T |
obj.method() |
Μόνο η σταθερή έκδοση | Δεν μπορεί να αλλάξει την κατάσταση του σταθερού αντικειμένου. |
T |
obj.method() |
Μη σταθερή μέθοδος | Μπορεί να αλλάξει την κατάσταση. |
T |
obj.method() const |
Σταθερή μέθοδος | Αν και και οι δύο εκδόσεις υπάρχουν και καλούνται σε μη σταθερό αντικείμενο, προτεραιότητα έχει η μη σταθερή. Αλλά μπορεί να γίνει ρητά cast το αντικείμενο, αν θέλετε να καλέσετε τη σταθερή έκδοση (σπάνια). |
Η χρήση της σταθερότητας είναι καλή πρακτική, καθώς αυξάνει την αναγνωσιμότητα και την ασφάλεια του κώδικα, και επιτρέπει στον μεταγλωττιστή να πραγματοποιεί πρόσθετες βελτιστοποιήσεις.