friend functions c
Μάθετε περισσότερα για τις λειτουργίες φίλων στο C ++ με παραδείγματα.
Το C ++ υποστηρίζει τη δυνατότητα ενθυλάκωσης στην οποία τα δεδομένα ομαδοποιούνται μαζί με τις λειτουργίες που λειτουργούν σε αυτό για να σχηματίσουν μια ενιαία μονάδα. Κάνοντας αυτό το C ++ διασφαλίζει ότι τα δεδομένα είναι προσβάσιμα μόνο από τις λειτουργίες που λειτουργούν σε αυτό και όχι σε κανέναν εκτός της τάξης.
Αυτό είναι ένα από τα διακριτικά χαρακτηριστικά του C ++ που διατηρεί τα δεδομένα και τα εμποδίζει να διαρρεύσει στον έξω κόσμο.
=> Διαβάστε το The Easy C ++ Training Series.
Αλλά σε ορισμένες εφαρμογές σε πραγματικό χρόνο, μερικές φορές μπορεί να θέλουμε να έχουμε πρόσβαση σε δεδομένα εκτός της ομαδοποιημένης μονάδας. Για παράδειγμα, μια εξωτερική τάξη μπορεί να θέλει να έχει πρόσβαση σε ιδιωτικά και προστατευμένα δεδομένα μιας κλάσης C ++.
Το C ++ παρέχει μια δυνατότητα πρόσβασης σε ιδιωτικά και προστατευμένα δεδομένα μέσω μιας ειδικής λειτουργίας που ονομάζεται λειτουργία «φίλου» ή τάξη την οποία θα συζητήσουμε εδώ σε αυτό το σεμινάριο.
Τι θα μάθετε:
- Λειτουργία φίλου στο C ++
- Παράδειγμα λειτουργίας φίλου
- Τάξη φίλων
- Πλεονεκτήματα / μειονεκτήματα της λειτουργίας φίλου
- συμπέρασμα
- Συνιστώμενη ανάγνωση
Λειτουργία φίλου στο C ++
Μια συνάρτηση φίλου στο C ++ είναι μια συνάρτηση που προηγείται της λέξης-κλειδιού «φίλος». Όταν η συνάρτηση δηλώνεται ως φίλος, τότε μπορεί να έχει πρόσβαση στα ιδιωτικά και προστατευμένα μέλη δεδομένων της τάξης.
Μια συνάρτηση φίλου δηλώνεται μέσα στην τάξη με μια λέξη-κλειδί φίλου που προηγείται όπως φαίνεται παρακάτω.
class className{ …… friend returnType functionName(arg list); };
Όπως φαίνεται παραπάνω, η συνάρτηση φίλου δηλώνεται μέσα στην τάξη στην οποία πρέπει να έχουν πρόσβαση ιδιωτικά και προστατευμένα μέλη δεδομένων. Η συνάρτηση μπορεί να οριστεί οπουδήποτε στο αρχείο κώδικα και δεν χρειάζεται να χρησιμοποιήσουμε τη λέξη-κλειδί φίλος ή την ανάλυση εύρους, χειριστή.
Υπάρχουν ορισμένα σημεία που πρέπει να θυμάστε κατά την εφαρμογή των λειτουργιών φίλων στο πρόγραμμά μας:
- Μια συνάρτηση φίλου μπορεί να δηλωθεί στην ιδιωτική ή δημόσια ενότητα της τάξης.
- Μπορεί να ονομαστεί σαν μια κανονική λειτουργία χωρίς τη χρήση του αντικειμένου.
- Η συνάρτηση φίλου δεν εμπίπτει στο πεδίο της τάξης, της οποίας είναι φίλος.
- Δεν γίνεται επίκληση μιας λειτουργίας φίλου χρησιμοποιώντας το αντικείμενο κλάσης, καθώς δεν εμπίπτει στο πεδίο εφαρμογής της τάξης.
- Μια συνάρτηση φίλου δεν μπορεί να αποκτήσει απευθείας πρόσβαση στα ιδιωτικά και προστατευμένα μέλη δεδομένων της τάξης. Πρέπει να κάνει χρήση ενός αντικειμένου κλάσης και στη συνέχεια να έχει πρόσβαση στα μέλη χρησιμοποιώντας τον τελεστή κουκκίδων.
- Μια συνάρτηση φίλων μπορεί να είναι μια καθολική συνάρτηση ή ένα μέλος μιας άλλης τάξης.
Παράδειγμα λειτουργίας φίλου
Ας εφαρμόσουμε ένα παράδειγμα προγραμματισμού για να κατανοήσουμε καλύτερα τη χρήση της λειτουργίας Function.
#include #include using namespace std; class sample{ int length, breadth; public: sample(int length, int breadth):length(length),breadth(breadth) {} friend void calcArea(sample s); //friend function declaration }; //friend function definition void calcArea(sample s){ cout<<'Area = '< Παραγωγή:
Περιοχή = 150
Στο παραπάνω πρόγραμμα, έχουμε ένα δείγμα τάξης με μήκος και πλάτος ιδιωτικών μελών. Έχουμε έναν δημόσιο κατασκευαστή που αρχικοποιεί τις τιμές μήκους και πλάτους. Στη συνέχεια, έχουμε μια λειτουργία φίλου 'calcArea' που υπολογίζει την περιοχή λαμβάνοντας υπόψη το μήκος και το πλάτος.
Σημειώστε ότι το calcArea είναι μια λειτουργία φίλου και δεν ανήκει στην τάξη. Στην κύρια συνάρτηση, μετά τη δημιουργία ενός αντικειμένου του δείγματος τάξης, το περνάμε στη συνάρτηση calcArea που υπολογίζει την περιοχή και εμφανίζει την τιμή.
Τάξη φίλων
Ακριβώς όπως οι λειτουργίες φίλων, μπορούμε επίσης να έχουμε μια τάξη φίλων. Η τάξη φίλων μπορεί να έχει πρόσβαση σε ιδιωτικά και προστατευμένα μέλη της τάξης στην οποία είναι φίλος.
class A{ …… friend class B; }; class B{ …….. };
Όπως απεικονίζεται παραπάνω, η τάξη Β είναι φίλος της τάξης Α. Έτσι, η τάξη Β μπορεί να έχει πρόσβαση στα ιδιωτικά και προστατευόμενα μέλη της τάξης Α.
Αλλά αυτό δεν σημαίνει ότι η τάξη Α μπορεί να έχει πρόσβαση σε ιδιωτικά και προστατευόμενα μέλη της τάξης Β. Σημειώστε ότι η φιλία δεν είναι αμοιβαία αν δεν το κάνουμε.
Ομοίως, η φιλία της τάξης δεν κληρονομείται. Αυτό σημαίνει ότι καθώς η τάξη Β είναι φίλος της τάξης Α, δεν θα είναι φίλος των υποκατηγοριών της τάξης Α.
Ας πάρουμε ένα παράδειγμα προγραμματισμού για να δείξουμε την τάξη φίλων.
#include #include using namespace std; class Area{ int length,breadth,area; public: Area(int length,int breadth):length(length),breadth(breadth) {} void calcArea(){ area = length * breadth; } friend class printClass; }; class printClass{ public: void printArea(Area a){ cout<<'Area = '< Παραγωγή:
Περιοχή = 150
σχεσιακά έναντι μη σχεσιακών βάσεων δεδομένων πλεονεκτήματα και μειονεκτήματα
Σε αυτό το πρόγραμμα, έχουμε δύο τάξεις. Η κατηγορία 'Περιοχή' που υπολογίζει την περιοχή χρησιμοποιώντας τις παραμέτρους μήκους και πλάτους. Σημειώστε ότι τα πεδία, η περιοχή, το μήκος και το πλάτος είναι όλα ιδιωτικά μέλη της περιοχής κλάσης.
Η επόμενη κλάση που χρησιμοποιείται είναι το 'printClass' που εκτυπώνει την περιοχή που υπολογίζεται από μια συνάρτηση calcArea στην κατηγορία Περιοχή. Καθώς τα μέλη είναι ιδιωτικά, πρέπει να κάνουμε το printClass φίλο της τάξης της περιοχής.
Μόλις γίνει αυτό, στην κύρια συνάρτηση δημιουργούμε ένα αντικείμενο της κλάσης περιοχής, υπολογίζουμε την περιοχή και περνάμε το αντικείμενο στη συνάρτηση printArea της τάξης printClass για να εμφανιστεί η περιοχή.
Πλεονεκτήματα / μειονεκτήματα της λειτουργίας φίλου
Ένα πλεονέκτημα της λειτουργίας φίλου ή της τάξης είναι ότι μπορούμε να έχουμε πρόσβαση στα ιδιωτικά και προστατευμένα δεδομένα της τάξης. Για παράδειγμα, εάν εφαρμόζουμε μια συνδεδεμένη λίστα, τότε μπορούμε να κάνουμε την κλάση συνδεδεμένης λίστας ως φίλη της κλάσης κόμβων και να αποκτήσουμε πρόσβαση στα δεδομένα της καθώς η συνδεδεμένη λίστα αποτελείται από κόμβους.
Έτσι σε μια συγκεκριμένη κατάσταση η χρήση μιας λειτουργίας φίλου ή τάξης μπορεί να αποδειχθεί επωφελής. Ωστόσο, έχει και κάποια μειονεκτήματα.
Ένα από τα διακριτικά χαρακτηριστικά του C ++ είναι η ενθυλάκωση, δηλαδή ομαδοποίηση δεδομένων και λειτουργιών που λειτουργούν σε αυτά τα δεδομένα μαζί, έτσι ώστε καμία εξωτερική λειτουργία ή κλάση να μην έχει πρόσβαση στα δεδομένα. Όμως, επιτρέποντας στις λειτουργίες φίλων ή στην τάξη να έχουν πρόσβαση στα ιδιωτικά μέλη μιας άλλης τάξης, διακυβεύουμε στην πραγματικότητα τη δυνατότητα ενθυλάκωσης.
Προκειμένου να αποφευχθεί αυτό, θα πρέπει να είμαστε προσεκτικοί σχετικά με τη χρήση λειτουργιών φίλου ή τάξης. Πρέπει να διασφαλίσουμε ότι δεν θα πρέπει να χρησιμοποιούμε πάρα πολλές συναρτήσεις και τάξεις φίλων στο πρόγραμμά μας, οι οποίες θα συμβιβαστούν εντελώς στην ενθυλάκωση.
συμπέρασμα
Αυτό ολοκληρώνει το σεμινάριό μας για τη λειτουργία φίλων και τα μαθήματα στο C ++.
Οι αναγνώστες πρέπει να είναι πολύ προσεκτικοί όταν χρησιμοποιούν μαθήματα φίλων και λειτουργίες σαν να μπορεί να λειτουργήσει ως όφελος για τον προγραμματιστή, πρέπει επίσης να χρησιμοποιηθεί με προσοχή καθώς η υπερβολική χρήση των λειτουργιών φίλων και τα μαθήματα μπορούν να θέσουν σε κίνδυνο τη δυνατότητα OOP της ενθυλάκωσης στο πρόγραμμά μας.
Στο επερχόμενο σεμινάριό μας, θα μάθουμε λεπτομερώς για τις Στατικές λειτουργίες στο C ++.
=> Επισκεφθείτε εδώ για να μάθετε C ++ από το μηδέν.
Συνιστώμενη ανάγνωση